精华内容
下载资源
问答
  • 《Java项目开发实战入门》以一起来画画、通讯录系统、明日彩票预测系统、小小五子棋、企业进销存管理系统、企业QQ(局域网版)、九宫格记忆网和铭成在线考试系统8个精选项目为案例,从趣味性和实际应用角度出发,...

    内容介绍

    《Java项目开发实战入门》以一起来画画、通讯录系统、明日彩票预测系统、小小五子棋、企业进销存管理系统、企业QQ(局域网版)、九宫格记忆网和铭成在线考试系统8个精选项目为案例,从趣味性和实际应用角度出发,采用了当前主流技术,读者可以从这些项目中体验到编程的乐趣并获得实战经验。《Java项目开发实战入门》应用的主要技术及知识点有:Java AWT、Java Swing、MySQL数据库、Hibernate、BeautyEye外观样式、多线程、Socket编程、人机对战实现、Derby、JSP、JavaScript、CSS、Servlet、HTML5等

    ——优势——

    √ 零基础实战入门——快速扫盲视频,预备知识入门学习;
    √ 项目精彩,讲解到位——8个流行项目,6小时教学视频,代码注释详尽;
    √ 书网结合——在线课程,PC端、移动端免费同步学习;
    √ 4色真彩印刷——还原编程真实开发环境。

    ——随书附赠——

    √ 《小白手册》——环境搭建、程序调试、排错秘籍,帮助用户轻松搭建开发环境,快速解决开发问题;
    √ 光盘——24小时视频讲解、项目江姐视频、项目源码、资源文件、代码查错器、代码片段,方便读者学习。
    √ 二维码——书中设置多种功能二维码,视频二维码、代码解释二维码、会员二维码等;手机看视频,手机看文档,多种资源手机一扫尽在掌握。
    √ 技术支持——QQ、微信、论坛等均可获得图书内容相关的技术支持,可以获得全方位的学习资源和技术支持。
    √ 光盘附赠开发资源库——732个实例与源码详细分析、15个经典模块开发过程完整展现、110套界面资源方案库

    ——读者对象——

    √ 零基础编程的自学者
    √ 编程爱好者
    √ 大中专院校的老师和学生
    √ 培训机构的老师和学生
    √ 参加毕业设计的学生
    √ 初级和中级程序开发人员
    《Java项目开发实战入门》是一本让初学者通过项目实战开发学编程的超值图书。

    目录

    • Java开发之旅
    • 第1章一起来画画(JavaAWT实现)预备知识视频讲解:2小时31分
    • 项目开发视频讲解:1小时58分
    • 代码解释(在线扩展讲解):15段1.1开发背景
    • 1.2系统功能设计
    • 1.2.1系统功能结构
    • 1.2.2系统业务流程
    • 1.3搭建项目
    • 1.3.1系统开发环境要求
    • 1.3.2创建新项目
    • 1.3.3导入资源
    • 1.4创建可以显示的窗体
    • 1.5创建画板
    • 1.6添加鼠标画笔功能
    • 1.7添加工具栏
    • 1.7.1添加工具栏组件
    • 1.7.2实现调整画笔粗细功能
    • 1.7.3实现添加颜色功能
    • 1.7.4实现清除图像功能
    • 1.7.5实现绘制图形功能
    • 1.7.6实现保存图片功能
    • 1.8添加菜单栏
    • 1.8.1添加菜单栏组件
    • 1.8.2给菜单项添加点击事件
    • 1.9实现添加水印功能
    • 1.10添加鼠标图标效果
    • 1.10.1创建保存图标的包
    • 1.10.2实现更改鼠标图标功能
    • 1.11添加简笔画对照窗口
    • 1.11.1创建保存简笔画素材的包
    • 1.11.2创建显示简笔画的窗体
    • 1.11.3实现简笔画窗体与主窗体互相关联
    • 1.12让按钮变得更好看(选学)
    • 1.13一起来找茬
    • 1.14本章总结
    • 第2章通讯录系统(JavaSwing+MySQL+Hibernate+BeautyEye外观样式实现)预备知识视频讲解:3小时24分
    • 项目开发视频讲解:1小时58分
    • 代码解释(在线扩展讲解):11段2.1开发背景
    • 2.2系统功能设计
    • 2.2.1系统功能结构
    • 2.2.2系统业务流程
    • 2.3创建项目
    • 2.3.1系统开发环境要求
    • 2.3.2创建新项目
    • 2.3.3导入资源
    • 2.4创建主窗体类
    • 2.5连接并读取数据库数据
    • 2.5.1搭建Hibernate框架
    • 2.5.2让主窗体表格显示数据
    • 2.6添加展示客户信息功能
    • 2.6.1创建展示客户信息窗体
    • 2.6.2给主窗体表格添加双击事件
    • 2.7添加用户登录功能
    • 2.7.1主窗体添加用户权限识别功能
    • 2.7.2创建用户登录窗体
    • 2.8添加修改客户信息功能
    • 2.8.1添加修改客户信息按钮
    • 2.8.2创建修改客户信息窗体类
    • 2.8.3添加主窗体按钮点击事件
    • 2.8.4添加修改客户信息窗体按钮点击事件
    • 2.8.5添加数据校验功能
    • 2.9添加新增客户信息功能
    • 2.9.1添加新增客户信息按钮
    • 2.9.2创建新增客户信息窗体
    • 2.9.3添加主窗体按钮点击事件
    • 2.10添加删除客户信息功能
    • 2.11美化窗体界面(选学)
    • 2.11.1BeautyEye插件简介
    • 2.11.2使用BeautyEye外观样式
    • 2.12一起来找茬
    • 2.13本章总结
    • 第3章明日彩票预测系统(JavaSwing+MySQL+多线程实现)预备知识视频讲解:6小时29分
    • 项目开发视频讲解:2小时11分
    • 代码解释(在线扩展讲解):20段3.1开发背景
    • 3.2系统功能设计
    • 3.2.1系统功能结构
    • 3.2.2系统业务流程
    • 3.3系统开发必备
    • 3.3.1系统开发环境要求
    • 3.3.2创建明日彩票预测系统项目
    • 3.4数据库设计
    • 3.4.1数据库概述
    • 3.4.2数据表设计
    • 3.5登录窗体设计
    • 3.5.1登录窗体概述
    • 3.5.2设计登录窗体
    • 3.5.3登录功能的实现
    • 3.6主窗体设计
    • 3.6.1主窗体概述
    • 3.6.2主窗体基本布局
    • 3.6.3添加主窗体中的组件
    • 3.6.4实现数据库的连接
    • 3.6.5分页显示历届开奖信息
    • 3.6.6打开主窗体
    • 3.7号码走势对话框设计
    • 3.7.1号码走势对话框概述
    • 3.7.2创建号码走势对话框
    • 3.7.3创建第一位开奖号码走势面板
    • 3.7.4实现号码走势对话框功能
    • 3.7.5实现从主窗体向号码走势对话框的跳转功能
    • 3.7.6设计第一位开奖号码走势面板
    • 3.7.7获取第一位开奖号码走势数据
    • 3.7.8以折线图显示近10期开奖号码走势
    • 3.8随机选号对话框设计
    • 3.8.1随机选号对话框概述
    • 3.8.2添加随机选号对话框中的组件
    • 3.8.3实现显示开奖期数
    • 3.8.4实现从主窗体向随机选号对话框的跳转功能
    • 3.8.5随机选号和按要求选号的切换
    • 3.8.6机选选号功能的实现
    • 3.8.7按照指定要求选取彩票号码
    • 3.8.8指定按要求选号时的约束条件
    • 3.8.9彩票购买功能的实现
    • 3.8.10关闭随机选号对话框
    • 3.9一起来找茬
    • 3.10本章总结
    • 第4章小小五子棋(JavaAWT+Socket编程+多线程+人机对战实现)代码解释(在线扩展讲解):14段4.1开发背景
    • 4.2系统功能设计
    • 4.2.1系统功能结构
    • 4.2.2系统业务流程
    • 4.3系统开发环境要求
    • 4.4项目目录结构预览
    • 4.5公共模块设计
    • 4.5.1定义用户类
    • 4.5.2定义棋盘模型类
    • 4.6界面模型设计
    • 4.6.1界面模型概述
    • 4.6.2设计主窗体
    • 4.6.3设计登录界面
    • 4.6.4绘制棋盘界面
    • 4.6.5实现单击鼠标落棋功能
    • 4.6.6实现游戏回放功能
    • 4.6.7实现自由更换背景功能
    • 4.6.8清屏动画的实现
    • 4.7通讯模块设计
    • 4.7.1通讯模块概述
    • 4.7.2信息识别功能的实现
    • 4.7.3实现发送/接收聊天信息功能
    • 4.7.4“悔棋”命令的实现
    • 4.8五子棋算法设计
    • 4.9人机对战设计
    • 4.9.1人机对战算法概述
    • 4.9.2电脑自动处理用户请求
    • 4.9.3电脑判断落棋点
    • 4.9.4电脑自动落棋
    • 4.10本章总结
    • 第5章企业进销存管理系统(JavaSwing+MySQL实现)代码解释(在线扩展讲解):20段5.1开发背景
    • 5.2系统功能设计
    • 5.2.1系统功能结构
    • 5.2.2系统业务流程
    • 5.3数据库设计
    • 5.3.1数据库概述
    • 5.3.2设计数据表
    • 5.4项目中的组织结构
    • 5.5公共类设计
    • 5.5.1创建Item公共类
    • 5.5.2创建数据模型公共类
    • 5.5.3创建Dao公共类
    • 5.6系统主窗体概述
    • 5.7进货单模块设计
    • 5.7.1添加进货商品的空模板
    • 5.7.2显示指定供应商主营商品名称的下拉列表
    • 5.7.3更新进货商品详细信息
    • 5.7.4统计进货商品信息
    • 5.7.5进货商品入库功能的实现
    • 5.8销售单模块设计
    • 5.8.1初始化销售票号
    • 5.8.2添加销售商品信息
    • 5.8.3统计销售商品信息
    • 5.8.4商品销售功能的实现
    • 5.9库存盘点模块设计
    • 5.9.1显示所有库存商品信息
    • 5.9.2统计库存商品的损益数量
    • 5.10数据库备份与恢复模块设计
    • 5.10.1备份数据库
    • 5.10.2获取数据库备份文件
    • 5.10.3恢复数据库
    • 5.11本章总结
    • 第6章企业QQ(局域网版)(JavaSwing+Derby+多线程+Socket编程实现)代码解释(在线扩展讲解):28段
    • 6.1开发背景
    • 6.2系统功能设计
    • 6.2.1系统功能结构
    • 6.2.2系统业务流程
    • 6.3数据库设计
    • 6.4系统开发必备
    • 6.4.1系统开发环境要求
    • 6.4.2项目中的组织结构
    • 6.5公共类设计
    • 6.5.1数据库操作类
    • 6.5.2系统工具类
    • 6.6主窗体设计
    • 6.6.1创建主窗体
    • 6.6.2记录窗体位置
    • 6.7系统托盘模块设计
    • 6.7.1系统托盘模块概述
    • 6.7.2初始化系统托盘
    • 6.7.3设计系统托盘中的“打开”和“退出”快捷菜单
    • 6.7.4双击托盘弹出主窗体
    • 6.8系统工具模块设计
    • 6.8.1系统工具模块概述
    • 6.8.2设计系统工具选项卡
    • 6.8.3搜索新用户
    • 6.9用户管理模块设计
    • 6.9.1用户管理模块概述
    • 6.9.2用户列表设计
    • 6.9.3获取本地用户对象
    • 6.9.4实现用户的添加和删除功能
    • 6.10通信模块设计
    • 6.10.1通信模块概述
    • 6.10.2通信窗体设计
    • 6.10.3消息的接收和发送
    • 6.10.4显示消息记录
    • 6.10.5仿QQ抖动功能的实现
    • 6.10.6截图功能的实现
    • 6.11本章总结
    • 第7章九宫格记忆网(JavaAWT+JSP+MySQL+JavaScript+CSS实现)代码解释(在线扩展讲解):12段7.1开发背景
    • 7.2系统功能设计
    • 7.2.1系统功能结构
    • 7.2.2系统业务流程
    • 7.3系统开发环境要求
    • 7.4项目目录结构预览
    • 7.5数据库设计
    • 7.5.1数据库结构预览
    • 7.5.2数据表结构
    • 7.6公共类设计
    • 7.6.1编写数据库连接及操作类
    • 7.6.2编写保存分页代码的JavaBean
    • 7.6.3配置解决中文乱码的过滤器
    • 7.6.4编写实体类
    • 7.7主界面设计
    • 7.7.1主界面概述
    • 7.7.2采用DIV+CSS技术使页面内容居中
    • 7.7.3主界面的实现过程
    • 7.8用户模块设计
    • 7.8.1用户模块概述
    • 7.8.2实现Ajax重构功能
    • 7.8.3用户注册的实现
    • 7.8.4用户登录的实现
    • 7.8.5退出登录的实现
    • 7.8.6找回密码功能
    • 7.9显示日记列表模块设计
    • 7.9.1显示日记列表概述
    • 7.9.2展开和收缩图片功能
    • 7.9.3查看日记原图功能
    • 7.9.4对日记图片进行左转和右转
    • 7.9.5显示全部日记功能
    • 7.9.6查看个人日记功能
    • 7.9.7删除个人日记功能
    • 7.10写日记模块设计
    • 7.10.1写日记模块概述
    • 7.10.2填写日记信息的实现
    • 7.10.3预览日记图片功能
    • 7.10.4保存日记图片功能
    • 7.11社交模块设计
    • 7.11.1社交模块的概述
    • 7.11.2评论功能的实现
    • 7.11.3点赞功能的实现
    • 7.12本章总结
    • 第8章铭成在线考试系统(Servlet+JSP+MySQL+HTML5+JavaScript实现)代码解释(在线扩展讲解):9段界面预览
    • 项目功能应用技术预览
    • 攻占Java大陆
    • 武林荣誉称号榜
    • (以下拓展内容在配书光盘中)
    • 8.1开发背景
    • 8.2系统功能设计
    • 8.2.1系统功能结构
    • 8.2.2系统业务流程
    • 8.3系统开发必备
    • 8.3.1系统开发环境需求
    • 8.3.2项目结构预览
    • 8.4数据库设计
    • 8.4.1初始化数据库
    • 8.4.2数据库表结构
    • 8.4.3数据库表关系
    • 8.5正确答案加密模块设计
    • 8.5.1字符串ASCII码加密
    • 8.5.2科学的加密方式MD5
    • 8.6考试计时模块设计
    • 8.6.1使用WebSocket实现考试计时功能
    • 8.6.2JSP引用WebSocket
    • 8.6.3编写计时模块的业务逻辑
    • 8.6.4启动计时线程
    • 8.7考试科目模块设计
    • 8.7.1获取并显示考试科目
    • 8.7.2获取并显示指定考试科目的所有试卷
    • 8.7.3获取并显示试题及答案
    • 8.8其他功能设计
    • 8.8.1试卷编辑模块设计
    • 8.8.2科目编辑页面设计
    • 8.8.3查看成绩页面设计
    • 8.9本章总结

    读书笔记

    《阿里巴巴 Java开发手册》读后感小结

    前言

    只有光头才能变强

    前一阵子一直在学Redis,结果在黄金段位被虐了,暂时升不了段位了,每天都拿不到首胜(好烦)。

    趁着学校校运会,合理地给自己放了一个小长假,然后就回家了。回到家才发现当时618买了一堆书,这堆书还有没撕包装的呢…于是我翻出了最薄的一本《阿里巴巴 Java开发手册》

    《阿里巴巴 Java开发手册》读后感小结

    这本书一共就90多页,一天就可以通读完了,看完之后我又来水博文了。

    注意:

    • 书上很多的规范是可以用IDE来避免的,也有很多之前已经知道的了。
    • 所以,这篇文章只记录我认为比较重要,或者说是我之前开发时没有注意到的一些规范(知识点)。
    • 该文章的内容肯定没有书上写得那么全的,如果感兴趣的同学可以去买一本来读一下~

    PDF官方地址:https://github.com/alibaba/p3c

    一、Java相关

    1.POJO是DO/DTO/BO/VO的统称,禁止命名为xxxPOJO

    2.获取多个对象的方法中list作为前缀

    3.获取统计值的方法用count作为前缀

    4.POJO类中的布尔类型(Boolean)的变量都不要加is前缀,否则部分框架解析会引起序列化错误

    • 如果你的变量名带is的话,比如isActive,框架解析的时候可能就当成active了。

    5.如果是形容能力的接口名称,取对应的形容词为接口名(通常是-able的形式)

    6.不允许任何魔法值(未经预先定义的常量)直接出现在代码中

    7.Object的euqals方法容易抛出空指针异常,应使用常量或者有值的对象来调用equals。推荐使用java.util.Object#equals工具类

    8.所有POJO类的属性全部使用包装数据类型,RPC的返回值和参数必须使用包装数据类型,所有的局部变量都使用基本数据类型。定义VO/DTO/DO等POJO类时,不要设定任何属性的默认值

    • 如果你的类属性使用int这样的基本数据类型,默认值是0。一般情况下该变量没有赋值,一般想表达的是不存在(null),而不是0。

    9.构造方法禁止加入任何的业务逻辑,如果初始化逻辑可以放在init方法中。set/get方法也不要增加业务逻辑。 •如果set/get方法放入业务逻辑,有时候排查问题就变得很麻烦了

    10.工具类Arrays.asList()把数组转成List时,不能使用其修改集合的相关方法。比如说add、clear、remove

    11.在JDK7以及以上版本中,Comparator要满足三个条件,不然调用Arrays.sort()或者Collections.sort()会报异常。 •x,y 的比较结果和 y,x 的比较结果相反

    • 传递性:x>y并且y>z,那么x一定大于z
    • 对称性:x=y,则 x,z 比较结果和y,z比较结果相同

    12.使用entrySet遍历Map类集合K/V,而不是用keySet方式遍历 •keySet遍历了两次,一次是转成Iterator对象,一次是从hashMap中取出key所对应的value,如果JDK8可以使用Map.foreach方法

    13.线程资源必须由线程池提供,不允许在应用中自行显示创建线程。线程池不允许用Executors创建,通过ThreadPoolExecutor的方式创建,这样的处理方式能够让编写代码的工程师更加明确线程池的运行规则,规避资源耗尽的风险。

    14.SimpleDateFormat是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类

    • 如果是JDK8应用,可以使用Instant(针对时间统计等场景)代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替SimpleDateFormat

    15.避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed导致性能下降 •在JDK7之后,可以直接使用API ThreadLocalRandom,而在JDK7 之前,需要编码保证每个线程持有一个实例。

    16.类、类属性、类方法的注释必须使用 Javadoc 规范,使用 /*内容/ 格式,不得使用 //xxx 方式

    17.所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释,除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。所有的类都必须添加创建者和创建日期。

    18.对于暂时被注释掉,后续可能恢复使用的代码片断,在注释代码的上方,使用三个斜杠///来说明注释代码的理由

    19.保证单元测试的独立性。为了保证单元测试稳定可靠且便于维护,单元测试之间不能互相调用,也不能依赖执行的先后顺序。

    20.高并发服务器建议调小TCP协议的time_await超时时间,调大最大事件句柄数(fd),

    1.1值得说明的点

    一、不允许任何魔法值(未经预先定义的常量)直接出现在代码中

    例子:

      Negative example:
      //Magic values, except for predefined, are forbidden in coding.
      if (key.equals {
        //...
      }
    
      Positive example:
      String KEY_PRE = ;
      if (KEY_PRE.equals(key)) {
        //...
      }
    

    ps:我猜是把先常量定义出来,后续引用/修改的时候就很方便了。

    二、Object的euqals方法容易抛出空指针异常,应使用常量或者有值的对象来调用equals。推荐使用java.util.Object#equals工具类

    java.util.Object#equals的源码(已经判断null的情况了)

     public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
      }
    

    三、工具类Arrays.asList()把数组转成List时,不能使用其修改集合的相关方法。

    因为返回的ArrayList是一个内部类,并没有实现集合的修改方法。后台的数据仍是数组,这里体现的是适配器模式。

    《阿里巴巴 Java开发手册》读后感小结

    四、在JDK7以及以上版本中,Comparator要满足自反性,传递性,对称性,不然调用Arrays.sort()或者Collections.sort()会报异常。

    The implementor must ensure that sgn(compare(x, y)) == -sgn(compare(y, x)) for all x and y. (This implies that compare(x, y) must throw an exception if and only if compare(y, x) throws an exception.)

    The implementor must also ensure that the relation is transitive: ((compare(x, y)>0) && (compare(y, z)>0)) implies compare(x, z)>0.

    Finally, the implementor must ensure that compare(x, y)==0 implies that sgn(compare(x, z))==sgn(compare(y, z)) for all z.

    1) x,y 的比较结果和 y,x 的比较结果相反。

    2) 传递性:x>y,y>z,则 x>z。

    3) 对称性:x=y,则 x,z 比较结果和 y,z 比较结果相同。

    反例:下例中没有处理相等的情况,实际使用中可能会出现异常:

    new Comparator<Student>() {
      @Override
      public int compare(Student o1, Student o2) {
        return o1.getId() > o2.getId() ? 1 : -1;
      }
    }
    

    使用entrySet遍历Map类集合K/V,而不是用keySet方式遍历

    首先我们来看一下使用keySet是如何遍历HashMap的:

    new Comparator<Student>() {
      @Override
      public int compare(Student o1, Student o2) {
        return o1.getId() > o2.getId() ? 1 : -1;
      }
    }
    

    再来看一下源码:

    // 1. 得到keySet,如果不存在,则创建
    public Set<K> keySet() {
      Set<K> ks = keySet;
      if (ks == null) {
        ks = new KeySet();
        keySet = ks;
      }
      return ks;
    }
    
    // 2.初始化ks (实际上就是Set集合[HashMap的内部类],在初始化时需要顺便初始化iterator)
    ks = new AbstractSet<K>() {
      public Iterator<K> iterator() {
        return new Iterator<K>() {
          private Iterator<Entry<K,V>> i = entrySet().iterator();
    
          public boolean hasNext() {
            return i.hasNext();
          }
    
          public K next() {
            return i.next().getKey();
          }
    
          public void remove() {
            i.remove();
          }
        };
      }
    
    };
    

    再来看一下entrySet,可以直接拿到key和value,不用再使用get方法来得到value,所以比keySet更加推荐使用!

    public static void main(String[] args) throws InterruptedException {
    
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put
        hashMap.put
        hashMap.put
    
    
        // 得到entrySet,遍历entrySet得到结果
        Set<Map.Entry<String, String>> entrySet = hashMap.entrySet();
        Iterator<Map.Entry<String, String>> iterator = entrySet.iterator();
        while (iterator.hasNext()) {
          Map.Entry<String, String> entry = iterator.next();
          System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue());
        }
      }
    

    如果是JDK8的话,推荐直接使用Map.forEach()就好了,我们也来看看用法:

    public static void main(String[] args) throws InterruptedException {
    
      HashMap<String, String> hashMap = new HashMap<>();
      hashMap.put
      hashMap.put
      hashMap.put
    
      
      // forEach用法
      hashMap.forEach((key, value) -> System.out.println("key = " + key + ", value = " + value));
    }
    

    其实在源码里边我们可以发现,forEach实际上就是封装了entrySet,提供forEach给我们可以更加方便地遍历Map集合

    // forEach源码
      default void forEach(BiConsumer<? super K, ? super V> action) {
        Objects.requireNonNull(action);
        for (Map.Entry<K, V> entry : entrySet()) {
          K k;
          V v;
          try {
            k = entry.getKey();
            v = entry.getValue();
          } catch(IllegalStateException ise) {
            // this usually means the entry is no longer in the map.
            throw new ConcurrentModificationException(ise);
          }
          action.accept(k, v);
        }
      }
    

    五、SimpleDateFormat是线程不安全的类,一般不要定义为static变量,如果定义为static,必须加锁,或者使用DateUtils工具类。

    有以下的例子可以正确使用SimpleDateFormat:

    // 1. 在方法内部使用,没有线程安全问题
    private static final String FORMAT = "yyyy-MM-dd HH:mm:ss";
    public String getFormat(Date date){
      SimpleDateFormat dateFormat = new SimpleDateFormat(FORMAT);
      return dateFormat.format(date);
    }
    
    
    // 2. 每次使用的时候加锁   
    private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public void getFormat(){
      synchronized (SIMPLE_DATE_FORMAT){
      SIMPLE_DATE_FORMAT.format(new Date());.;
    }
        
    // 3. 使用ThreadLocal,每个线程都有自己的SimpleDateFormat对象,互不干扰
    private static final ThreadLocal<DateFormat> DATE_FORMATTER = new ThreadLocal<DateFormat>() {
      @Override
      protected DateFormat initialValue() {
        return new SimpleDateFormat("yyyy-MM-dd");
      }
    };
    
    // 4. 使用DateTimeFormatter(This class is immutable and thread-safe.)
    
      DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
      System.out.println(timeFormatter.format(LocalDateTime.now()));
    

    如果是JDK8应用,可以使用Instant代替Date,LocalDateTime代替Calendar,DateTimeFormatter代替SimpleDateFormat。

    二、数据库相关

    1.表达是否概念的字段,必须使用isxxx的方式命名,数据类型是unsigned tinyint(1表示是,0表示否)

    2.小数类型用decimal,禁止使用float和double。

    3.varchar是可变字符串,不预选分配存储空间的话,长度不要超过5000个字符。如果超过则用text,独立一张表,用主键对应,避免影响到其他字段的索引效率。

    4.表必备的三个字段:id(类型是unsigned bigint),gmt_create(创建时间),gme_modified(修改时间)

    5.字段允许适当冗余,以提高查询性能,但必须考虑数据一致性。冗余的字段必须不是频繁修改的字段,不是varhar超长字段(更不能是text字段)。

    6.单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表(如果预计三年都达不到这个数据量,不要在创建表的时候就分库分表!)

    7.超过三个表禁止使用join,需要join的字段,数据类型必须保持一致,当多表关联查询时,保证被关联的字段需要有索引!

    8.在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,页面搜索严禁左模糊或者全模糊,如果需要则通过搜索引擎来解决。

    • 充分利用好最左前缀匹配特性!

    9.利用延迟关联或者子查询优化超多也分场景。

    10.如果有全球化需要,均以utf-8编码。如果需要存储表情,选择utf8mb4进行存储。

    2.1值得说明的点

    一、利用延迟关联或者子查询优化超多也分场景。

    MySQL并不是跳过 offset行,而是取 offset+N行,然后返回放弃前offset行,返回N行,那当 offset特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行SQL改写。

    例子:

    // 优化前
    
    SELECT id, cu_id, name, info, biz_type
      , gmt_create, gmt_modified, start_time, end_time, market_type
      , back_leaf_category, item_status, picuture_url
    FROM relation
    WHERE biz_type = '0'
      AND end_time >= '2014-05-29'
    ORDER BY id ASC
    LIMIT 149420, 20;
    
    
    // 优化后
    
    SELECT a.*
    FROM relation a, (
        SELECT id
        FROM relation
        WHERE biz_type = '0'
          AND end_time >= '2014-05-29'
        ORDER BY id ASC
        LIMIT 149420, 20
      ) b
    WHERE a.id = b.id
    

    解释:其实这里就是通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。这样就是充分利用了索引!

    三、未解决的问题

    在看《手册》的时候还有一些知识点没看过、没实践过、涉及到的知识点比较多的,在这里先mark一下,后续再遇到或者有空的时候再回来补坑~

    • 使用CountDownLatch进行异步转同步操作,每个线程退出前必须调用 countDown方法,线程执行代码注意 catch 异常,确保 countDown 方法被执行到,避免主线程无法执行至 await 方法,直到超时才返回结果。说明: 注意,子线程抛出异常堆栈,不能在主线程 try-catch 到。
    • 对于一写多读,是可以解决变量同步问题, 但是如果多写,同样无法解决线程安全问题。如果是 count++操作,使用如下类实现: AtomicInteger count = new AtomicInteger(); count.addAndGet(1);如果是 JDK8,推荐使用 LongAdder 对象,比 AtomicLong 性能更好(减少乐观锁的重试次数)。
    • 使用JDK8的Optional类来防止NPE问题。

    当然了,如果你有比较好的资料阅读,也可以在评论区告诉我。我也会mark住好好看看。

    比如说:“3y,我发现Optional类有篇文章写得很不错,url是xxxx(书籍的名称是xxx)

    由于现在没有一定的经验积累,所以以下的章节得回头看:

    • 《手册》中的“日志规约”,“工程结构”、“设计规范”

    最后

    看我上面写的内容就知道,除了一些规范外,还有很多实用的小技巧,这些对我们开发是有帮助的。我这个阶段也有一些没怎么接触过的(“日志”,“设计”,“二方库”),这些都需要我在成长中不断的回看才行。

    如果需要这本书籍的全部内容 可以私信联系我哦,记得一键三连,谢谢大家支持哦如需课件源码软件等资料添加小助手vx:xcw18874131605(备注:CSDN)

    最新2021整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君羊:547998459

    展开全文
  • 下载链接:C++项目开发实战入门 (说明:下载页面点击普通下载即可开始下载, 不用安装网盘软件.) (需要什么资源欢迎在下方评论留言, 找到后会第一时间回复) ...

    下载链接:C++项目开发实战入门

    (说明:下载页面点击普通下载即可开始下载, 不用安装网盘软件.)

    (需要什么资源欢迎在下方评论留言, 找到后会第一时间回复)

     

    展开全文
  • C语言项目开发实战

    2019-01-30 16:16:08
    C语言项目开发实战-C语言也能干大事,很多实战例子,举例
  • C++项目开发实战入门_明日科技 《C++项目开发实战入门》以坦克动荡游戏、 桌面破坏王游戏、 快乐吃豆子游戏、 植物大战僵尸 修改器、 软件注册机 、 365系统加速器、 Q友--f故你自己的QQ和股票分析仿真系统共8个项目...
  • c语言开发入门项目实战
  • 领取成功您已领取成功!您可以进入Android/iOS/Kindle平台...快登录帐号来一起讨论吧~登录|注册共条回复10) { %>“-回复 :回复不要太快哦~回复内容不能为空哦回复已提交审核...[{ sid : '115854',id : '0f15c5471fd...

    领取成功

    您已领取成功!

    您可以进入Android/iOS/Kindle平台的多看阅读客户端,刷新个人中心的已购列表,即可下载图书,享受精品阅读时光啦!

    -

    |

    回复不要太快哦~

    回复内容不能为空哦

    回复已提交审核...

    快登录帐号来一起讨论吧~登录|注册

    共条回复

    10) { %>

    -

    回复 :

    回复不要太快哦~

    回复内容不能为空哦

    回复已提交审核...

    [

    { sid : '115854',

    id : '0f15c5471fda419d99c8245cf0f54d42',

    webreader : 1,

    title : '环球科学(2016年8月)',

    price : '9.99',

    old_price : '12.0',

    new_price : '9.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01wgPQCfrEJ/Y5lP8LrckM5vw6.jpg!vt',

    url : '/book/115854',

    authors : '《环球科学》编辑部'

    }

    ,

    { sid : '100503',

    id : 'c7f2fb724c7a4cb99fb4da32689b2276',

    webreader : 1,

    title : '布朗神父探案全集(译言古登堡计划 全五册)',

    price : '34.99',

    old_price : '68.0',

    new_price : '34.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/s010/p01QlVYJ7ifu/NbPI1Ar5LAswwZ.jpg!vt',

    url : '/book/100503',

    authors : '【英】吉尔伯特·基思·切斯特顿'

    }

    ,

    { sid : '91510',

    id : '7b78682636c54925a6e25ca784f4b69f',

    webreader : 1,

    title : '情商(全六册)',

    price : '39.99',

    old_price : '240.0',

    new_price : '39.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01M8Wh61cSr/0MAtKcM7zoLPoc.jpg!vt',

    url : '/book/91510',

    authors : '【美】丹尼尔·戈尔曼\\n【美】理查德·博亚特兹\\n【美】安妮·麦基'

    }

    ,

    { sid : '117194',

    id : '760857f53fba4dedbd63513570936347',

    webreader : 1,

    title : '外国畅销悬疑推理小说荟萃(共25册)',

    price : '200.0',

    old_price : '248.0',

    new_price : '200.0',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01dGF78gsEz/1pt6AZfmtTmAtP.jpg!vt',

    url : '/book/117194',

    authors : '【英】蒂姆·维卡利,萨菲娜·德福奇 等'

    }

    ,

    { sid : '112707',

    id : 'ec5c6d1ba5314ac497efac475439bad6',

    webreader : 1,

    title : '幸存者',

    price : '17.99',

    old_price : '25.0',

    new_price : '17.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01R2tJL6A2y/lSmO4R3dVKHYkk.jpg!vt',

    url : '/book/112707',

    authors : '秦明'

    }

    ,

    { sid : '46064',

    id : '15c1638d7c874fefb9394a0a9507954f',

    webreader : 1,

    title : '这个历史挺靠谱:袁腾飞讲历史(全三册)',

    price : '49.99',

    old_price : '60.0',

    new_price : '49.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/s010/p01XGJjrHEIe/oiyzXy6fAtGAkT.jpg!vt',

    url : '/book/46064',

    authors : '袁腾飞'

    }

    ,

    { sid : '52289',

    id : 'c77e87b5d1f44cd68a90c89779fb8209',

    webreader : 1,

    title : '杉杉来吃',

    price : '6.99',

    old_price : '12.99',

    new_price : '6.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01LpircKAkG/hr7a9KaovyWAEZ.jpg!vt',

    url : '/book/52289',

    authors : '顾漫'

    }

    ,

    { sid : '101803',

    id : '3fd40f0595324dc3a28ec3cfe8eb6db7',

    webreader : 1,

    title : '骄阳似我(上)',

    price : '6.99',

    old_price : '12.99',

    new_price : '6.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01UuDwap449/MQmfLUGi5Kfc9M.jpg!vt',

    url : '/book/101803',

    authors : '顾漫'

    }

    ,

    { sid : '69529',

    id : 'f49212ebaa424f859a76dc1910a7eaeb',

    webreader : 1,

    title : '大谋小计五十年:诸葛亮传(全五册)',

    price : '40.0',

    old_price : '73.0',

    new_price : '40.0',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01l3LzENh3G/KbKcUgcXDVdXB5.jpg!vt',

    url : '/book/69529',

    authors : '若虚'

    }

    ,

    { sid : '91061',

    id : 'ecaba87245ab417f91ae4c21ff164d0d',

    webreader : 1,

    title : '哲学家们都干了些什么(全新修订版)',

    price : '9.99',

    old_price : '12.0',

    new_price : '9.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01eYnVwuNvM/mgJGUMiO63unlE.jpg!vt',

    url : '/book/91061',

    authors : '林欣浩'

    }

    ,

    { sid : '52290',

    id : '5505e7414d6841499d542b79133087ef',

    webreader : 1,

    title : '何以笙箫默',

    price : '6.99',

    old_price : '12.99',

    new_price : '6.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01j5AISxQL6/2bmzMoZE1EDg3I.jpg!vt',

    url : '/book/52290',

    authors : '顾漫'

    }

    ,

    { sid : '102472',

    id : 'becb5ee4ec284717a8afb2f75186bda9',

    webreader : 1,

    title : '陀思妥耶夫斯基集(世界名著名译文库 全九册)',

    price : '148.0',

    old_price : '188.0',

    new_price : '148.0',

    cover : 'http://cover.read.duokan.com/mfsv2/download/s010/p01thVkrdadN/eXqZqVytgaipOk.jpg!vt',

    url : '/book/102472',

    authors : '【俄】陀思妥耶夫斯基'

    }

    ,

    { sid : '90296',

    id : 'ac2751e77c8749ada6595e1d951ae564',

    webreader : 1,

    title : '顾漫甜蜜三部曲520我爱你纪念版(全三册)',

    price : '19.99',

    old_price : '36.99',

    new_price : '19.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/s010/p011mcyOPDZy/WBpQcEXoK6tRA0.jpg!vt',

    url : '/book/90296',

    authors : '顾漫'

    }

    ,

    { sid : '106463',

    id : 'fd231f4b007a46998e0c47d5ad3e3854',

    webreader : 1,

    title : '钓愚:操纵与欺骗的经济学',

    price : '35.99',

    old_price : '40.0',

    new_price : '35.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01ZUTeYOkEs/bqBoeQwv5l8SZk.jpg!vt',

    url : '/book/106463',

    authors : '【美】乔治·阿克洛夫\\n【美】罗伯特·席勒'

    }

    ,

    { sid : '85780',

    id : '0ecdc01c519d4a48b2f6c606ca0a866e',

    webreader : 1,

    title : '偷影子的人',

    price : '17.99',

    old_price : '25.0',

    new_price : '17.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01GwBgNjtVq/wcfgTPktRQ58Dt.jpg!vt',

    url : '/book/85780',

    authors : '【法】马克·李维'

    }

    ,

    { sid : '90317',

    id : 'ef9a0bc14f564ba6bca4c7be9b671435',

    webreader : 1,

    title : '岛上书店',

    price : '9.99',

    old_price : '25.0',

    new_price : '9.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01WB3Z3M3lh/kNYssnLUEmYZgy.jpg!vt',

    url : '/book/90317',

    authors : '【美】加·泽文'

    }

    ,

    { sid : '46302',

    id : 'a5045c0531064273823d3ef03234d476',

    webreader : 1,

    title : '教父(全三册)',

    price : '59.99',

    old_price : '148.0',

    new_price : '59.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01j5IjfAuRh/6m7qohOiLqZTB9.jpg!vt',

    url : '/book/46302',

    authors : '【美】马里奥·普佐'

    }

    ,

    { sid : '104611',

    id : '91542aae06084b7fa2b3190f1e22dc0d',

    webreader : 1,

    title : '周浩晖推理悬疑经典集(共10册)',

    price : '59.99',

    old_price : '380.0',

    new_price : '59.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01xs6hSQ40f/7TFUPmudjYidlL.jpg!vt',

    url : '/book/104611',

    authors : '周浩晖'

    }

    ,

    { sid : '43159',

    id : 'd1f9f774086849fab6360c8125e6202a',

    webreader : 1,

    title : '自控术:如何管住自己的生活心理学',

    price : '17.99',

    old_price : '25.0',

    new_price : '17.99',

    cover : 'http://cover.read.duokan.com/mfsv2/download/s010/p01pX0dhyew1/8z7exND8GLz5sz.jpg!vt',

    url : '/book/43159',

    authors : '菲尼克'

    }

    ,

    { sid : '72094',

    id : '41ccae60d8fc4b3ba0df0be5df75be1d',

    webreader : 1,

    title : '春秋战国真有趣(全六册)',

    price : '99.97',

    old_price : '350.0',

    new_price : '99.97',

    cover : 'http://cover.read.duokan.com/mfsv2/download/fdsc3/p01PqXSWtfa7/A0ZvQDIlA1rCjB.jpg!vt',

    url : '/book/72094',

    authors : '龙镇'

    }

    ]

    展开全文
  • c语言项目开发PDF

    2017-10-28 10:46:23
    c语言项目开发PDF c语言项目开发PDF c语言项目开发PDF
  • 全书以5l系列单片机(8051/AT89)为写作平台,以工程应用为核心,通过大量实例精讲的形式,详细介绍5l单片机项目开发的方法与技巧。全书分为2篇共17章,第一篇为开发基础篇,简要介绍5l单片机的硬件结构、指令系统...

    全书以5l系列单片机(8051/AT89)为写作平台,以工程应用为核心,通过大量实例精讲的形式,详细介绍5l单片机项目开发的方法与技巧。全书分为2篇共17章,第一篇为开发基础篇,简要介绍5l单片机的硬件结构、指令系统以及常用开发工具,引导读者开发入门;第二篇为应用实例篇,通过15个实例,对智能仪器仪表、自动工业控制、数字消费电子、网络与通信以及汽车与医疗电子5个部分详细而深入地阐述开发的思路、流程和经验技巧。实例全部来自于工程实践,代表性和指导性强,读者通过学习后举一反三,设计水平将得到快速提高,逐步从入门达到精通的水平。

    本书不但详细介绍了51单片机的硬件设计和软件编程,而且提供了完善的设计思路与方案,总结了作者的开发心得和注意事项,以帮助读者理解精髓,学懂学透。

    此外,随书附赠光盘中还提供了全书实例的开发思路、方法和过程的语音视频讲解,手把手指导读者温习巩固;另外还开展开发板空板免费有限赠送活动,让读者学练结合,最大化地实现学习价值。

    本书适合计算机、自动化、电子及硬件等相关专业大学生,以及从事5l单片机开发的科研人员使用,是学习51单片机开发的必备参考宝典。

    目录:

    第一篇 开发基础

    第1章 51单片机入门

    第2章 51单片机常用开发工具

    第二篇 应用实例

    第一部分 智能仪器仪表

    第3章 数字频率计的设计

    第4章 电子指南针的设计

    第5章 智能数字采集仪表

    第二部分 自动工业控制

    第6章 超声波测距系统

    第三部分 数字消费电子

    第四部分 网络与通信

    第五部分 汽车与医疗电子

    参考文献

    39e822a70694a76baf651aaa88eddc62.png

    展开全文
  • [C语言学习路线图:C语言开发入门项目实战
  • [C语言学习路线图:C语言开发入门项目实战].明日科技.扫描版.pdf C++ 经典资料 我网上搜集来的资料,放在这里备份。
  • 随着大数据时代到来,网络信息量也变得更多更大,基于传统搜索引擎的局限性,网络爬虫应运而生,本书从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言和Web前端基础知识引领读者入门,之后介绍动态爬虫原理以及...
  • 随着大数据时代到来,网络信息量也变得更多更大,基于传统搜索引擎的局限性,网络爬虫应运而生,本书从基本的爬虫原理开始讲解,通过介绍Pthyon编程语言和Web前端基础知识引领读者入门,之后介绍动态爬虫原理以及...
  • PWM与PyFirmata391 16.9利用PyFirmata控制伺服电机393 16.10定制基于TTLSerial的Arduino通信395 16.11通过I2C自定义与Arduino之间的通信399 16.12在树莓派上使用小型Arduino402 16.13aLaMode板与树莓派入门403 16.14...
  • 一本完整高清的Python爬虫开发项目实战。目录第1章 回顾Python编程1.1 安装Python1.1.1 Windows上安装Python1.1.2 Ubuntu上的Python1.2 搭建开发环境1.2.1 Eclipse+PyDev1.2.2 PyCharm1.3 IO编程1.3.1 文件读写...
  • 让你的编程事半功倍Python项目与封装/团队开发环境/问题驱动开发/源码管理(Mercurial)Jenkins持续集成(CI)/环境搭建与部署的自动化(Ansible)/Django框架……Python项目开发实战(第2版)是日本极客和书虫们的...
  • c语言入门到精通PDF是一本用来学习c语言的非常实用的书。本书使用通俗的语言,丰富多彩的实例,各种各样的图片,详尽的介绍了C语言进行程序开发应该掌握的各方面知识。并且每个图例旁边都有着详细的注释,使读者...
  • iPhone开发实战.pdf

    2014-01-16 12:07:55
    IPhone开发实战,开发必备,入门更加必备
  • 这是2015年至今陆陆续续编写一套QT5软件开发入门教程,配套了所有的案例完整代码,方便QT初学者快速入门;文章里包含了QT常用的控件使用介绍、多媒体应用、线程、网络编程、蓝牙、串口、应用发布、嵌入式设备环境...
  • 126 3.15.3 非W3C标准命令... 127 3.16 配置Chrome浏览器... 127 3.17 SSL证书错误处理... 129 第4章 UnitTest测试框架... 131 4.1 UnitTest简介... 131 4.2 TestFixture. 132 4.3 TestCase. 133 4.4 断言Assert ...
  • python项目开发实战 第2版是一本Python项目开发流程实战手册,由日本BePROUD股份有限公司编著。本书的内容全部基于python开发事实,全部都是BeProud员工实际尝试、实践过的,可以给读者提供一些能实际应用且行之有效...
  • 本书为Swift开发:iOS App快速入门实战的高清完整PDF。Swift集合了C与Objective-C程序语言的优点,但比这两种编译语言在编译与运行上更加快捷。 本书以深浅有序的规划,贴切易懂的范例,引导读者快速进入程序设计...
  • c语言开发实战

    2019-03-25 15:21:02
    C语言开发详细文档,文档包括了c语言开发详细的说明。
  • 让你的编程事半功倍Python项目与封装/团队开发环境/问题驱动开发/源码管理(Mercurial)Jenkins持续集成(CI)/环境搭建与部署的自动化(Ansible)/Django框架……Python项目开发实战(第2版)是日本极客和书虫们的...
  • Docker入门与应用实战一 Docker概述二 Docker安装三 镜像管理四 容器管理课程目录 五 管理应用程序数据六 容器网络七 Dockerfile八 企业级镜像仓库Harbor九 Jenkins与Docker的自动化CI/CD流水线实战学完这门课程会...
  • 【实例简介】【实例截图】【核心代码】目录前言基础篇第1章 回顾Python编程21.1 安装Python21.1.1 Windows上安装Python21.1.2 Ubuntu上的Python31.2 搭建开发环境41.2.1 Eclipse PyDev41.2.2 PyCharm101.3 ...
  • Python项目案例开发入门实战源代码第6章 爬虫应用——抓取百度图片
  • 【实例简介】【实例截图】【核心代码】目录前言基础篇第1章 回顾Python编程21.1 安装Python21.1.1 Windows上安装Python21.1.2 Ubuntu上的Python31.2 搭建开发环境41.2.1 Eclipse PyDev41.2.2 PyCharm101.3 ...
  • Python开发实战介绍如何用Python开发科学计算的...《Python开发实战》来自真正的开发现场,是BePROUD公司众多极客在真实项目中的经验总结。作者从Python的环境搭建讲起,介绍了Web应用开发方法、任务管理,以及评审...
  • python项目开发实战 第2版是一本Python项目开发流程实战手册,由日本BePROUD股份有限公司编著。本书的内容全部基于python开发事实,全部都是BeProud员工实际尝试、实践过的,可以给读者提供一些能实际应用且行之有效...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,955
精华内容 2,382
关键字:

c项目开发实战入门pdf