Java项目:在线宠物商店系统(java+SSM+mysql+maven+tomcat)
源码获取:博客首页 "资源" 里下载!
一、项目简述
功能:本系统分用户前台和管理员后台。 系统包括用户的注册登录,狗狗的展示购物车添加以及下 单支付购买,后台有管理员用户,可以操作狗狗的品种, 狗狗的信息维护以及发货等等。 另外:系统采用MVC架构思想
二、项目运行
环境配置: Jdk1.8 + Tomcat8.5 + mysql + Eclispe (IntelliJ IDEA,Eclispe,MyEclispe,Sts 都支持)
项目技术: JSP +Spring + SpringMVC + MyBatis + html+ css + JavaScript + JQuery + Ajax + layui+ maven等等。
后台相关接口:
/*** 后台相关接口*/
@Controller
@RequestMapping("/admin")
public class AdminController {private static final int rows = 10;@Autowiredprivate AdminService adminService;@Autowiredprivate OrderService orderService;@Autowiredprivate UserService userService;@Autowiredprivate GoodService goodService;@Autowiredprivate TopService topService;@Autowiredprivate TypeService typeService;/*** 管理员登录* @return*/@RequestMapping("/login")public String login(Admins admin, HttpServletRequest request, HttpSession session) {if (adminService.checkUser(admin.getUsername(), admin.getPassword())) {session.setAttribute("username", admin.getUsername());return "redirect:index";}request.setAttribute("msg", "用户名或密码错误!");return "/admin/login.jsp";}/*** 退出* @return*/@RequestMapping("/logout")public String logout(HttpSession session) {session.removeAttribute("admin");return "/admin/login.jsp";}/*** 后台首页* @return*/@RequestMapping("/index")public String index(HttpServletRequest request) {request.setAttribute("msg", "恭喜你! 登录成功了");return "/admin/index.jsp";}/*** 订单列表* * @return*/@RequestMapping("/orderList")public String orderList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request,@RequestParam(required=false, defaultValue="1") int page) {request.setAttribute("flag", 1);request.setAttribute("status", status);request.setAttribute("orderList", orderService.getList(status, page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, orderService.getTotal(status), page, rows));return "/admin/order_list.jsp";}/*** 订单发货* * @return*/@RequestMapping("/orderDispose")public String orderDispose(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.dispose(id);return "redirect:orderList?flag=1&status="+status+"&page="+page;}/*** 订单完成* * @return*/@RequestMapping("/orderFinish")public String orderFinish(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.finish(id);return "redirect:orderList?flag=1&status="+status+"&page="+page;}/*** 订单删除* * @return*/@RequestMapping("/orderDelete")public String orderDelete(int id, byte status,@RequestParam(required=false, defaultValue="1") int page) {orderService.delete(id);return "redirect:orderList?flag=1&status="+status+"&page="+page;}/*** 顾客管理* * @return*/@RequestMapping("/userList")public String userList(HttpServletRequest request,@RequestParam(required=false, defaultValue="1") int page) {request.setAttribute("flag", 2);request.setAttribute("userList", userService.getList(page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, userService.getTotal(), page, rows));return "/admin/user_list.jsp";}/*** 顾客添加* * @return*/@RequestMapping("/userAdd")public String userAdd(HttpServletRequest request) {request.setAttribute("flag", 2);return "/admin/user_add.jsp";}/*** 顾客添加* * @return*/@RequestMapping("/userSave")public String userSave(Users user, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {if (userService.isExist(user.getUsername())) {request.setAttribute("msg", "用户名已存在!");return "/admin/user_add.jsp";}userService.add(user);return "redirect:userList?flag=2&page="+page;}/*** 顾客密码重置页面* * @return*/@RequestMapping("/userRe")public String userRe(int id, HttpServletRequest request) {request.setAttribute("flag", 2);request.setAttribute("user", userService.get(id));return "/admin/user_reset.jsp";}/*** 顾客密码重置* * @return*/@RequestMapping("/userReset")public String userReset(Users user, @RequestParam(required=false, defaultValue="1") int page) {String password = SafeUtil.encode(user.getPassword());user = userService.get(user.getId());user.setPassword(password);userService.update(user);return "redirect:userList?flag=2&page="+page;}/*** 顾客更新* * @return*/@RequestMapping("/userEdit")public String userEdit(int id, HttpServletRequest request) {request.setAttribute("flag", 2);request.setAttribute("user", userService.get(id));return "/admin/user_edit.jsp";}/*** 顾客更新* * @return*/@RequestMapping("/userUpdate")public String userUpdate(Users user, @RequestParam(required=false, defaultValue="1") int page) {userService.update(user);return "redirect:userList?flag=2&page="+page;}/*** 顾客删除* * @return*/@RequestMapping("/userDelete")public String userDelete(Users user, @RequestParam(required=false, defaultValue="1") int page) {userService.delete(user);return "redirect:userList?flag=2&page="+page;}/*** 产品列表* * @return*/@RequestMapping("/goodList")public String goodList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {request.setAttribute("flag", 3);request.setAttribute("page", page);request.setAttribute("status", status);request.setAttribute("goodList", goodService.getList(status, page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotal(status), page, rows));return "/admin/good_list.jsp";}/*** 产品添加* * @return*/@RequestMapping("/goodAdd")public String goodAdd(HttpServletRequest request) {request.setAttribute("flag", 3);request.setAttribute("typeList", typeService.getList());return "/admin/good_add.jsp";}/*** 产品添加* * @return* @throws Exception */@RequestMapping("/goodSave")public String goodSave(String name, int price, String intro, int stock, int typeId, MultipartFile cover, MultipartFile image1, MultipartFile image2, @RequestParam(required=false, defaultValue="1") int page) throws Exception {Goods good = new Goods();good.setName(name);good.setPrice(price);good.setIntro(intro);good.setStock(stock);good.setTypeId(typeId);good.setCover(UploadUtil.fileUpload(cover));good.setImage1(UploadUtil.fileUpload(image1));good.setImage2(UploadUtil.fileUpload(image2));goodService.add(good);return "redirect:goodList?flag=3&page="+page;}/*** 产品更新* * @return*/@RequestMapping("/goodEdit")public String goodEdit(int id, HttpServletRequest request) {request.setAttribute("flag", 3);request.setAttribute("typeList", typeService.getList());request.setAttribute("good", goodService.get(id));return "/admin/good_edit.jsp";}/*** 产品更新* * @return* @throws Exception */@RequestMapping("/goodUpdate")public String goodUpdate(int id, String name, int price, String intro, int stock, int typeId, MultipartFile cover, MultipartFile image1, MultipartFile image2,@RequestParam(required=false, defaultValue="1") int page) throws Exception {Goods good = goodService.get(id);good.setName(name);good.setPrice(price);good.setIntro(intro);good.setStock(stock);good.setTypeId(typeId);if (Objects.nonNull(cover) && !cover.isEmpty()) {good.setCover(UploadUtil.fileUpload(cover));}if (Objects.nonNull(image1) && !image1.isEmpty()) {good.setImage1(UploadUtil.fileUpload(image1));}if (Objects.nonNull(image2) && !image2.isEmpty()) {good.setImage2(UploadUtil.fileUpload(image2));}goodService.update(good);return "redirect:goodList?flag=3&page="+page;}/*** 产品删除* * @return*/@RequestMapping("/goodDelete")public String goodDelete(int id, @RequestParam(required=false, defaultValue="1") int page) {goodService.delete(id);return "redirect:goodList?flag=3&page="+page;}/*** 添加推荐* @return*/@RequestMapping("/topSave")public @ResponseBody String topSave(Tops tops, @RequestParam(required=false, defaultValue="0")byte status,@RequestParam(required=false, defaultValue="1") int page) {int id = topService.add(tops);return id > 0 ? "ok" : null;}/*** 删除推荐* @return*/@RequestMapping("/topDelete")public @ResponseBody String topDelete(Tops tops, @RequestParam(required=false, defaultValue="0")byte status,@RequestParam(required=false, defaultValue="1") int page) {boolean flag = topService.delete(tops);return flag ? "ok" : null;}/*** 类目列表* * @return*/@RequestMapping("/typeList")public String typeList(HttpServletRequest request) {request.setAttribute("flag", 4);request.setAttribute("typeList", typeService.getList());return "/admin/type_list.jsp";}/*** 类目添加* * @return*/@RequestMapping("/typeSave")public String typeSave(Types type, @RequestParam(required=false, defaultValue="1") int page) {typeService.add(type);return "redirect:typeList?flag=4&page="+page;}/*** 类目更新* * @return*/@RequestMapping("/typeEdit")public String typeUp(int id, HttpServletRequest request) {request.setAttribute("flag", 4);request.setAttribute("type", typeService.get(id));return "/admin/type_edit.jsp";}/*** 类目更新* * @return*/@RequestMapping("/typeUpdate")public String typeUpdate(Types type, @RequestParam(required=false, defaultValue="1") int page) {typeService.update(type);return "redirect:typeList?flag=4&page="+page;}/*** 类目删除* * @return*/@RequestMapping("/typeDelete")public String typeDelete(Types type, @RequestParam(required=false, defaultValue="1") int page) {typeService.delete(type);return "redirect:typeList?flag=4&page="+page;}/*** 管理员列表* * @return*/@RequestMapping("/adminList")public String adminList(HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {request.setAttribute("flag", 5);request.setAttribute("adminList", adminService.getList(page, rows));request.setAttribute("pageTool", PageUtil.getPageTool(request, adminService.getTotal(), page, rows));return "/admin/admin_list.jsp";}/*** 管理员修改自己密码* * @return*/@RequestMapping("/adminRe")public String adminRe(HttpServletRequest request, HttpSession session) {request.setAttribute("flag", 5);request.setAttribute("admin", adminService.getByUsername(String.valueOf(session.getAttribute("username"))));return "/admin/admin_reset.jsp";}/*** 管理员修改自己密码* * @return*/@RequestMapping("/adminReset")public String adminReset(Admins admin, HttpServletRequest request) {request.setAttribute("flag", 5);if (adminService.get(admin.getId()).getPassword().equals(SafeUtil.encode(admin.getPassword()))) {admin.setPassword(SafeUtil.encode(admin.getPasswordNew()));adminService.update(admin);request.setAttribute("admin", admin);request.setAttribute("msg", "修改成功!");}else {request.setAttribute("msg", "原密码错误!");}return "/admin/admin_reset.jsp";}/*** 管理员添加* * @return*/@RequestMapping("/adminSave")public String adminSave(Admins admin, HttpServletRequest request, @RequestParam(required=false, defaultValue="1") int page) {if (adminService.isExist(admin.getUsername())) {request.setAttribute("msg", "用户名已存在!");return "/admin/admin_add.jsp";}adminService.add(admin);return "redirect:adminList?flag=5&page="+page;}/*** 管理员修改* * @return*/@RequestMapping("/adminEdit")public String adminEdit(int id, HttpServletRequest request) {request.setAttribute("flag", 5);request.setAttribute("admin", adminService.get(id));return "/admin/admin_edit.jsp";}/*** 管理员更新* * @return*/@RequestMapping("/adminUpdate")public String adminUpdate(Admins admin, @RequestParam(required=false, defaultValue="1") int page) {admin.setPassword(SafeUtil.encode(admin.getPassword()));adminService.update(admin);return "redirect:adminList?flag=5&page="+page;}/*** 管理员删除* * @return*/@RequestMapping("/adminDelete")public String adminDelete(Admins admin, @RequestParam(required=false, defaultValue="1") int page) {adminService.delete(admin);return "redirect:adminList?flag=5&page="+page;}}
用户相关接口:
/*** 用户相关接口*/
@Controller
@RequestMapping("/index")
public class UserController{private static final String INDENT_KEY = "order";@Resourceprivate UserService userService;@Resourceprivate OrderService orderService;@Resourceprivate GoodService goodService;@Resourceprivate TypeService typeService;/*** 注册用户* @return*/@RequestMapping("/register")public String register(@RequestParam(required=false, defaultValue="0")int flag, Users user, Model model){model.addAttribute("typeList", typeService.getList());if(flag==-1) {model.addAttribute("flag", 5); // 注册页面return "/index/register.jsp";}if (user.getUsername().isEmpty()) {model.addAttribute("msg", "用户名不能为空!");return "/index/register.jsp";}else if (userService.isExist(user.getUsername())) {model.addAttribute("msg", "用户名已存在!");return "/index/register.jsp";}else {String password = user.getPassword();userService.add(user);user.setPassword(password);return "redirect:login?flag=-1"; // 注册成功后转去登录}}/*** 用户登录* @return*/@RequestMapping("/login")public String login(@RequestParam(required=false, defaultValue="0")int flag, Users user, HttpSession session, Model model) {model.addAttribute("typeList", typeService.getList());if(flag==-1) {flag = 6; // 登录页面return "/index/login.jsp";}if(userService.checkUser(user.getUsername(), user.getPassword())){session.setAttribute("user", userService.get(user.getUsername()));return "redirect:index";} else {model.addAttribute("msg", "用户名或密码错误!");return "/index/login.jsp";}}/*** 注销登录* @return*/@RequestMapping("/logout")public String logout(HttpSession session) {session.removeAttribute("user");session.removeAttribute("order");return "/index/login.jsp";}/*** 查看购物车* @return*/@RequestMapping("/cart")public String cart(Model model) {model.addAttribute("typeList", typeService.getList());return "/index/cart.jsp";}/*** 购买* @return*/@RequestMapping("/buy")public @ResponseBody String buy(int goodid, HttpSession session){Goods goods = goodService.get(goodid);if (goods .getStock() <= 0) { // 库存不足return "empty";}Orders order = (Orders) session.getAttribute(INDENT_KEY);if (order==null) {session.setAttribute(INDENT_KEY, orderService.add(goods));}else {session.setAttribute(INDENT_KEY, orderService.addOrderItem(order, goods));}return "ok";}/*** 减少*/@RequestMapping("/lessen")public @ResponseBody String lessen(int goodid, HttpSession session){Orders order = (Orders) session.getAttribute(INDENT_KEY);if (order != null) {session.setAttribute(INDENT_KEY, orderService.lessenIndentItem(order, goodService.get(goodid)));}return "ok";}/*** 删除*/@RequestMapping("/delete")public @ResponseBody String delete(int goodid, HttpSession session){Orders order = (Orders) session.getAttribute(INDENT_KEY);if (order != null) {session.setAttribute(INDENT_KEY, orderService.deleteIndentItem(order, goodService.get(goodid)));}return "ok";}/*** 提交订单* @return*/@RequestMapping("/save")public String save(ServletRequest request, HttpSession session, Model model){model.addAttribute("typeList", typeService.getList());Users user = (Users) session.getAttribute("user");if (user == null) {request.setAttribute("msg", "请登录后提交订单!");return "/index/login.jsp";}Orders sessionOrder = (Orders) session.getAttribute(INDENT_KEY);if (sessionOrder != null) {if (sessionOrder != null) {for(Items item : sessionOrder.getItemList()){ // 检测商品库存(防止库存不足)Goods product = goodService.get(item.getGoodId());if(item.getAmount() > product.getStock()){request.setAttribute("msg", "商品 ["+product.getName()+"] 库存不足! 当前库存数量: "+product.getStock());return "/index/cart.jsp";}}}sessionOrder.setUserId(user.getId());sessionOrder.setUser(userService.get(user.getId()));int orderid = orderService.save(sessionOrder); // 保存订单session.removeAttribute(INDENT_KEY); // 清除购物车return "redirect:topay?orderid="+orderid;}request.setAttribute("msg", "处理失败!");return "/index/cart.jsp";}/*** 支付页面* @return*/@RequestMapping("/topay")public String topay(int orderid, ServletRequest request, Model model) {model.addAttribute("typeList", typeService.getList());request.setAttribute("order", orderService.get(orderid));return "/index/pay.jsp";}/*** 支付(模拟)* @return*/@RequestMapping("/pay")public String pay(Orders order, Model model) {model.addAttribute("typeList", typeService.getList());orderService.pay(order);return "redirect:payok?orderid="+order.getId();}/*** 支付成功* @return*/@RequestMapping("/payok")public String payok(int orderid, ServletRequest request, Model model) {model.addAttribute("typeList", typeService.getList());Orders order = orderService.get(orderid);int paytype = order.getPaytype();if(paytype == Orders.PAYTYPE_WECHAT || paytype == Orders.PAYTYPE_ALIPAY) {request.setAttribute("msg", "订单["+orderid+"]支付成功");}else {request.setAttribute("msg", "订单["+orderid+"]货到付款");}return "/index/payok.jsp";}/*** 查看订单* @return*/@RequestMapping("/order")public String order(HttpSession session, Model model){model.addAttribute("flag", 3);model.addAttribute("typeList", typeService.getList());Users user = (Users) session.getAttribute("user");if (user == null) {model.addAttribute("msg", "请登录后查看订单!");return "/index/login.jsp";}List<Orders> orderList = orderService.getListByUserid(user.getId());if (orderList!=null && !orderList.isEmpty()) {for(Orders order : orderList){order.setItemList(orderService.getItemList(order.getId()));}}model.addAttribute("orderList", orderList);return "/index/order.jsp";}/*** 个人信息* @return*/@RequestMapping("/my")public String my(Users user, HttpSession session, Model model){model.addAttribute("flag", 4);model.addAttribute("typeList", typeService.getList());Users userLogin = (Users) session.getAttribute("user");if (userLogin == null) {model.addAttribute("msg", "请先登录!");return "/index/login.jsp";}// 进入个人中心if (Objects.isNull(user) || Objects.isNull(user.getId())) {return "/index/my.jsp";}Users u = userService.get(user.getId());// 修改资料u.setName(user.getName());u.setPhone(user.getPhone());u.setAddress(user.getAddress());userService.update(u); // 更新数据库session.setAttribute("user", u); // 更新sessionmodel.addAttribute("msg", "信息修改成功!");// 修改密码if(user.getPasswordNew()!=null && !user.getPasswordNew().trim().isEmpty()) {if (user.getPassword()!=null && !user.getPassword().trim().isEmpty() && SafeUtil.encode(user.getPassword()).equals(u.getPassword())) {if (user.getPasswordNew()!=null && !user.getPasswordNew().trim().isEmpty()) {u.setPassword(SafeUtil.encode(user.getPasswordNew()));}userService.update(u); // 更新数据库session.setAttribute("user", u); // 更新sessionmodel.addAttribute("msg", "密码修改成功!");}else {model.addAttribute("msg", "原密码错误!");}}return "/index/my.jsp";}}
后台登录验证拦截器:
/*** 后台登录验证拦截器*/
public class AdminInterceptor extends HandlerInterceptorAdapter{/*** 检测登录状态*/@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String uri = request.getRequestURI();if(uri.contains("css/") || uri.contains("js/") || uri.contains("img/") || uri.contains("login") || uri.contains("logout")) {return true; // 不拦截路径}Object username = request.getSession().getAttribute("username");if (Objects.nonNull(username) && !username.toString().trim().isEmpty()) {return true; // 登录验证通过}response.sendRedirect("login.jsp");return false; // 其他情况一律拦截}}
源码获取:博客首页 "资源" 里下载!
相关文章:

字符串中的数字排序
2019独角兽企业重金招聘Python工程师标准>>> public static String getBusiScope(String busiScope){ String regex "\\d{1,2}"; String busiStr""; Pattern pattern Pattern.compile(regex); Matcher matcher pattern.matcher(busiScope…

oo第二单元总结
第二单元总结 第一次作业 一、设计策略 本次作业采用FAFS算法,可直接用输入线程与电梯线程交互,调度器暂时不需要参与,故一共设计三个类三线程:Main类、elevator类及input类,main线程、elevator线程及input线程。main线…

Rocksdb iterator 的 Forward-scan 和 Reverse-scan 的性能差异
前言 最近在读 MyRocks 存储引擎2020年的论文,因为这个存储引擎是在Rocksdb之上进行封装的,并且作为Facebook 内部MySQL的底层引擎,用来解决Innodb的空间利用率低下 和 压缩效率低下的问题。而且MyRocks 在接入他们UDB 之后成功达成了他们的…

Java知多少(29)覆盖和重载
在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称、返回值类型、参数列表。如果在新类中定义一个方法,其名称、返回值类型和参数列表正好与父类中的相同࿰…

Java项目:清新论坛系统(java+SSM+mysql+maven+tomcat)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能:本系统分用户前台和管理员后台。 用户前台主要功能有: 用户注册 用户登录 浏览帖子 回复帖子 修改个人资料 管理员后台的功能有: 管理论坛版块 用户管…

JUnit4.11 理论机制 @Theory 完整解读
最近在研究JUnit4,大部分基础技术都是通过百度和JUnit的官方wiki学习的,目前最新的发布版本是4.11,结合代码实践,发现官方wiki的内容或多或少没有更新,Theory理论机制章节情况尤为严重,不知道这章wiki对应的…

树链剖分——线段树区间合并bzoj染色
线段树区间合并就挺麻烦了,再套个树链就更加鬼畜,不过除了代码量大就没什么其他的了。。 一些细节:线段树每个结点用结构体保存,pushup等合并函数改成返回一个结构体,这样好写一些 struct Seg{int lc,rc,tot;Seg(){lcr…

MyRocks: 为facebool 的社交图谱服务的LSM-tree存储引擎
文章目录概览1. UDB 架构2. UDB 表格式3. Rocksdb:针对flash存储优化过的第三方库3.1 Rocksdb架构3.2 为什么选择Rocksdb4. MyRocks / Rocksdb 开发历程4.1 设计目标4.2 性能挑战4.2.1 降低CPU的消耗4.2.2 降低range-scan 的延时消耗4.2.3 磁盘空间和Compaction 的一…

Java项目:精品酒店管理系统(java+SSM+mysql+maven+tomcat)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能:主要功能主要功能会员管理,住客管理,房间管 理,系统管理,以及一些重要数据的展示导出维护等等; 二、项目运行 环境配置&…

iOS自动布局一
Align: Pin: 转载于:https://www.cnblogs.com/123qw/p/4404167.html

C#实现路由器断开连接,更改公网ip
publicstaticvoidDisconnect(){stringurl "断 线"; stringuri "http://192.168.1.1/userRpm/StatusRpm.htm?Disconnect"System.Web.HttpUtility.UrlEncode(url, System.Text.Encoding.GetEncoding("gb2312")) "&wan1"; str…

Go中的iota
当时在学习Iota这个知识点的时候仅仅是一笔掠过,比如这种 const(aiotab c) 一眼看出他怎么使用的时候就觉得自己已经懂得了 再到后来看到这样的例子 const(a 5*iotab c )以及 const(a 1<<(10*iota)bc ) 第一…

从 SSLTLS 的底层实现来看 网络安全的庞大复杂体系
文章目录前言1. HTTP协议通信的问题1.1 tcpdump 抓取http 请求包1.2 报文分析1.3 HTTP 协议问题2. SSL & TLS 协议的基本介绍和历史演进3. TLS 1.2 实现加密传输的过程3.1 TLS HandShake 协议概览3.2 第一次握手:ClientHello3.3 第二次握手:从Server…

UICollectionView
UICollectionView 多列的UITableView,最简单的形式,类似于iBooks中书架的布局,书架中放着你下载的和购买的电子书。 最简单的UICollectionView是一个GridView,可以多列的方式进行展示。 包含三部分,都是UIView的子类: …

Java项目:课程资源管理+在线考试平台(java+SSH+mysql+maven+tomcat)
源码获取:博客首页 "资源" 里下载! 一、项目简述 功能包括: 管理员可以增删改查教材、教材商、入库教材、用户(用 户包括学生和教师)可以对教材商、教材进行。xcel的导入 导出操作。教师可以领取入库的教材,可以退还教…

python twisted 笔记
2019独角兽企业重金招聘Python工程师标准>>> 1.Twisted框架构建简单的C/S 要写一个基于twisted框架的服务器,你要实现事件处理器,它处理诸如一个新的客户端连接、新的数据到达和客户端连接中断等情况。 在Twisted中,你的事件处理器定义在一个…

决策树J48算法
1. J48原理 2. 举例 3. 总结 1. J48原理 基于从上到下的策略,递归的分治策略,选择某个属性放置在根节点,为每个可能的属性值产生一个分支,将实例分成多个子集,每个子集对应一个根节点的分支,然后在每个分支…

分布式系统 一致性模型的介绍 以及 zookeeper的 “线性一致性“ 讨论
文章目录1. 一致性 概览1.1 分布式系统的 “正确性”1.2 线性一致性(Linearizability)1.3 顺序一致性(Sequential consistency)1.4 因果一致性(Casual consistency)1.5 最终一致性(Eventual consistency)2. Zookeeper 的 “线性一致性” 问题3. 参考一致性算是分布式系统的定位…

Java项目:(小程序)全套商城系统(spring+spring mvc+mybatis+layui+微信小程)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统功能包括: 商品模块: 商品添加、规格设置,商品上下架等 订单模块: 下单、购物车、支付,发货、收货、评 退款等 营销模块: 积分、优惠券、分销、砍价、拼团、秒 多…

【转】[退役]纪念我的ACM——headacher@XDU
转自:http://hi.baidu.com/headacher/item/5a2ce1d50609091b20e25022 退役了,是时候总结一下我ACM的生涯了。虽然很舍不得,但这段回忆很值得纪念。ACM生涯虽然结束,但是新生活总要继续,还有很多东西需要我去学习&#…

VMware扩大硬盘后修改Linux逻辑卷大小
一、背景随着业务的不断成熟,数据库积累的数据也越来越多了。前些天发现服务器的磁盘将要满了。因此向虚拟化管理员申请增加磁盘空间。由于这个系统是建立在威睿的vSphere平台上的,因此虚拟化管理员只简单地通过 VMware vSphere Client 扩大了磁盘空间&a…

axios与ajax区别
1.jQuery ajax $.ajax({ type: POST, url: url, data: data, dataType: dataType, success: function () {}, error: function () {}});优缺点: 本身是针对MVC的编程,不符合现在前端MVVM的浪潮基于原生的XHR开发,XHR本身的架构不清晰,已经有…

单机 “5千万以上“ 工业级 LRU cache 实现
文章目录前言工业级 LRU Cache1. 基本架构2. 基本操作2.1 insert 操作2.2 高并发下 insert 的一致性/性能 保证2.3 Lookup操作2.4 shard 对 cache Lookup 性能的影响2.4 Erase 操作2.5 内存维护3. 优化前言 近期做了很多 Cache 优化相关的事情,因为对存储引擎较为熟…

Java项目:校园人力人事资源管理系统(java+Springboot+ssm+mysql+jsp+maven)
源码获取:博客首页 "资源" 里下载! 校园人力资源管理系统:学校部门管理,教室管理,学历信息管理,职务,教师职称,奖励,学历,社会关系,工作…

GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NETsiverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的增多,平台已经臃肿不堪。 设计…

关于CSDN不给任何通知强制关闭我的6年博客,我深表痛心
关于CSDN不给任何通知强制关闭我的6年博客,我深表痛心。最近有很长一段时间没有去csdn博客了, 前几天去看的时候发现博客被封闭了。 我联系了管理员,但是没有得到任何回复。 我猜想,可能是不是我在博客文章里面加入 自己网站的网…

Vue 环境搭建(win10)
1.安装node node官网安装地址 推荐安装稳定版本(LTS)以及安装路径为系统盘(C) 查看node安装成功否 注释:以下命令使用 命令提示符(管理员)权限,win10 对user权限的限制了访问权限。node -v 查看…

Java项目:化妆品商城系统(java+Springboot+ssm+mysql+jsp+maven)
源码获取:博客首页 "资源" 里下载! 一、项目简述 本系统主要实现的功能有: 网上商城系统,前台后台管理,用户注册,登录,上架展示,分组展示,搜索,收…

python 绘图脚本系列简单记录
简单记录平时画图用到的python 便捷小脚本 1. 从单个文件输入 绘制坐标系图 #!/usr/bin/python # coding: utf-8 import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl import sysfile_name1 sys.argv[1] data_title sys.argv[2] print(file_name1…

iOS-c语言小练习01
// // main.c // C-变量的地址 // // Created by cgq on 15/4/9. // Copyright (c) 2015年 cgq. All rights reserved. // #include <stdio.h> //访问变量的地址 void test1() { char a A; int b 44; printf("a的值:%d\n",a); pri…