JDK

写代码有这16个好习惯,可以减少80%非业务的bug

混江龙づ霸主 提交于 2020-12-16 15:28:00
前言 每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~ github地址,感谢每颗star ❝ https://github.com/whx123/JavaHome ❞ 公众号: 「捡田螺的小男孩」 1. 修改完代码,记得自测一下 「改完代码,自测一下」 是每位程序员必备的基本素养。尤其不要抱有这种侥幸 「心理:我只是改了一个变量或者我只改了一行配置代码,不用自测了」 。改完代码,尽量要求自己都去测试一下哈,可以规避很多不必要bug的。 2. 方法入参尽量都检验 入参校验也是每个程序员必备的基本素养。你的方法处理, 「必须先校验参数」 。比如入参是否允许为空,入参长度是否符合你的预期长度。这个尽量养成习惯吧,很多 「低级bug」 都是 「不校验参数」 导致的。 ❝ 如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数, 「插入数据库直接异常」 了。 ❞ 3. 修改老接口的时候,思考接口的兼容性。 很多bug都是因为修改了对外老接口,但是却 「不做兼容导致」 的。关键这个问题多数是比较严重的,可能直接导致系统发版失败的。新手程序员很容易犯这个错误哦~ 所以,如果你的需求是在原来接口上修改,,尤其这个接口是对外提供服务的话,一定要考虑接口兼容

写代码有这16个好习惯,可以减少80%非业务的bug

99封情书 提交于 2020-12-16 15:27:30
前言 每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~ 1. 修改完代码,记得自测一下 「改完代码,自测一下」 是每位程序员必备的基本素养。尤其不要抱有这种侥幸 「心理:我只是改了一个变量或者我只改了一行配置代码,不用自测了」 。改完代码,尽量要求自己都去测试一下哈,可以规避很多不必要bug的。 2. 方法入参尽量都检验 入参校验也是每个程序员必备的基本素养。你的方法处理, 「必须先校验参数」 。比如入参是否允许为空,入参长度是否符合你的预期长度。这个尽量养成习惯吧,很多 「低级bug」 都是 「不校验参数」 导致的。 ❝ 如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数, 「插入数据库直接异常」 了。 ❞ 3. 修改老接口的时候,思考接口的兼容性。 很多bug都是因为修改了对外老接口,但是却 「不做兼容导致」 的。关键这个问题多数是比较严重的,可能直接导致系统发版失败的。新手程序员很容易犯这个错误哦~ 所以,如果你的需求是在原来接口上修改,,尤其这个接口是对外提供服务的话,一定要考虑接口兼容。举个例子吧,比如dubbo接口,原本是只接收A,B参数,现在你加了一个参数C,就可以考虑这样处理。 //老接口 void oldService

写代码有这16个好习惯,可以减少80%非业务的bug

梦想与她 提交于 2020-12-16 13:53:50
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨捡田螺的小男孩 来源丨捡田螺的小男孩 前言 每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~ github地址,感谢每颗star ❝ https://github.com/whx123/JavaHome ❞ 1. 修改完代码,记得自测一下 「改完代码,自测一下」 是每位程序员必备的基本素养。尤其不要抱有这种侥幸 「心理:我只是改了一个变量或者我只改了一行配置代码,不用自测了」 。改完代码,尽量要求自己都去测试一下哈,可以规避很多不必要bug的。 2. 方法入参尽量都检验 入参校验也是每个程序员必备的基本素养。你的方法处理, 「必须先校验参数」 。比如入参是否允许为空,入参长度是否符合你的预期长度。这个尽量养成习惯吧,很多 「低级bug」 都是 「不校验参数」 导致的。 ❝ 如果你的数据库字段设置为varchar(16),对方传了一个32位的字符串过来,你不校验参数, 「插入数据库直接异常」 了。 ❞ 3. 修改老接口的时候,思考接口的兼容性。 很多bug都是因为修改了对外老接口,但是却 「不做兼容导致」 的

007jdk配置

限于喜欢 提交于 2020-12-16 12:06:12
下载地址 链接:https://pan.baidu.com/s/1OFFQnMyLXYbx4XyiUY1zQg 提取码:rong 1.上传安装包 yum install lrzsz -y 安装完成之后,可以将本地文件拖拽进xshell完成上传。 2.解压缩 mkdir /usr/modules tar -zxf jdk-8u191-linux-x64.tar.gz -C /usr/modules 3.设置环境变量 vi /etc/profile 追加以下内容: export JAVA_HOME=/usr/modules/jdk1.8.0_191 export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH vi技巧:命令行模式 :! shell指令 4.加载环境变量 . /etc/profile 5.远程拷贝 for i in {2..3}; do ssh node$i 'mkdir /usr/modules';scp -r /usr/modules/jdk1.8.0_191 root@node$i:/usr/modules;done; 小技巧:远程拷贝的时候如果不想看拷贝过程,可以将结果重定向至/dev/null,具体如下 for i in {2..3}; do ssh node$i "mkdir /usr/modules";scp -r

Spring事务的那些坑,这里都给你总结好了!

半世苍凉 提交于 2020-12-16 10:27:04
点击上方“ java大数据修炼之道 ” , 选择“ 设为星标 ” 优质文章和精品资源, 第一时间送达 关注公众号后台回复 资源 获取实战教学资料+视频 哈喽,各位新来的小伙伴们,大家好!由于公众号做了改版,为了保证公众号的资源能准时推送到你手里,大家记得将咱们的公众号 加星标置顶 ,在此真诚的表示感谢 作者:蚊子squirrel www.jianshu.com/p/a4229aa79ace Spring框架已是JAVA项目的标配,其中Spring事务管理也是最常用的一个功能,但如果不了解其实现原理,使用姿势不对,一不小心就可能掉坑里。 为了更透彻的说明这些坑,本文分四部分展开阐述:第一部分简单介绍下Spring事务集成的几种方式;第二部分结合Spring源代码说明Spring事务的实现原理;第三部分通过实际测试代码介绍关于Spring事务的坑;第四部分是对本文的总结。 一、Spring事务管理的几种方式: Spring事务在具体使用方式上可分为两大类: 1. 声明式 基于 TransactionProxyFactoryBean的声明式事务管理 基于 <tx> 和 <aop> 命名空间的事务管理 基于 @Transactional 的声明式事务管理 2. 编程式 基于事务管理器API 的编程式事务管理 基于TransactionTemplate 的编程式事务管理

Spring事务的那些坑,这里都给你总结好了!

≯℡__Kan透↙ 提交于 2020-12-16 09:38:21
Spring框架已是JAVA项目的标配,其中Spring事务管理也是最常用的一个功能,但如果不了解其实现原理,使用姿势不对,一不小心就可能掉坑里。 为了更透彻的说明这些坑,本文分四部分展开阐述:第一部分简单介绍下Spring事务集成的几种方式;第二部分结合Spring源代码说明Spring事务的实现原理;第三部分通过实际测试代码介绍关于Spring事务的坑;第四部分是对本文的总结。 一、Spring事务管理的几种方式: Spring事务在具体使用方式上可分为两大类: 1. 声明式 基于 TransactionProxyFactoryBean的声明式事务管理 基于 <tx> 和 <aop> 命名空间的事务管理 基于 @Transactional 的声明式事务管理 2. 编程式 基于事务管理器API 的编程式事务管理 基于TransactionTemplate 的编程式事务管理 目前大部分项目使用的是声明式的后两种: 基于 <tx> 和 <aop> 命名空间的声明式事务管理可以充分利用切点表达式的强大支持,使得管理事务更加灵活。 基于 @Transactional 的方式需要实施事务管理的方法或者类上使用 @Transactional 指定事务规则即可实现事务管理,在Spring Boot中通常也建议使用这种注解方式来标记事务。 二、Spring事务实现机制

Git+Jenkins

痞子三分冷 提交于 2020-12-16 09:09:40
10.0.0.[227-229] 三台机器: 229Jenkins 228web 227git 一、环境准备: 227 yum install git -y iptables -F useradd git passwd git su git mkdir hehe cd hehe mkdir app.git cd app.git git --bare init ls -a 检查是否初始化成功 228 yum install git -y mkdir test cd test git clone git@227:/home/git/hehe/app.git 拉227上的app项目 cd app ls 检查仓库内文件是否拉下来了 vim file1 git add . git status git commit -m "1" 提到本地仓库 (此处可能需要配置email及name信息,直接将提示信息输入到终端即可) git status git push origin master 推到Git服务器227上 如果觉得输入密码麻烦,可以做秘钥认证(自己的公钥放到227下authkeys文件里) 二、Jenkins安装使用 官网 jenkins.io 229 wget -O /etc/yum.repo.d/jenkins.repo https://pkg.jenkins.io/redhat

Spring 事务的那些坑,都在这里了!

生来就可爱ヽ(ⅴ<●) 提交于 2020-12-16 08:58:19
作者:蚊子squirrel www.jianshu.com/p/a4229aa79ace Spring框架已是JAVA项目的标配,其中Spring事务管理也是最常用的一个功能,但如果不了解其实现原理,使用姿势不对,一不小心就可能掉坑里。 为了更透彻的说明这些坑,本文分四部分展开阐述: 第一部分简单介绍下Spring事务集成的几种方式; 第二部分结合Spring源代码说明Spring事务的实现原理; 第三部分通过实际测试代码介绍关于Spring事务的坑; 第四部分是对本文的总结。 一、Spring事务管理的几种方式: Spring事务在具体使用方式上可分为两大类: 1. 声明式 基于 TransactionProxyFactoryBean的声明式事务管理 基于 <tx> 和 <aop> 命名空间的事务管理 基于 @Transactional 的声明式事务管理 2. 编程式 基于事务管理器API 的编程式事务管理 基于TransactionTemplate 的编程式事务管理 目前大部分项目使用的是声明式的后两种: 基于 <tx> 和 <aop> 命名空间的声明式事务管理可以充分利用切点表达式的强大支持,使得管理事务更加灵活。 基于 @Transactional 的方式需要实施事务管理的方法或者类上使用 @Transactional 指定事务规则即可实现事务管理,在Spring

Java集合框架

守給你的承諾、 提交于 2020-12-16 06:56:30
一、ArrayList与LinkedList的异同 1、都不保证线程安全的 2、底层数据结构不同。ArrayList是数组,LinkedList是双向链表。 3、插入和删除的时间复杂度与元素位置有关。ArrayList在尾部增删时时间复杂度为O(1),在非尾部操作时时间复杂度为O(n-i)。LinkedList增删操作时时间复杂度为O(1)。 4、ArrayList支持快速随机访问(使用get(int index)方法),LinkedList不支持快速随机访问 5、内存空间占用方面。ArrayList造成的空间浪费体现在list列表结尾会预留一定的空间,而LinkList空间花费体现在每个元素要比ArrayList多消耗直接前驱和后驱的空间。 补充:RandomAccess接口 表示实现这个接口的类具有随机访问的功能 二、ArrayList与Vector的区别 1、ArrayList不是线程安全的,Vector所有的方法都是线程安全的。 2、二者的底层数据结构都是数组。当ArrayList空间不够时,默认增长50%,当Vector空间不够时,默认增长一倍。 3、Vector可以设置容量增加的参数,ArrayList不可以。 三、HashMap与HashTable的区别 1、HashMap不是线程安全的,HashTable是线程安全的。 2、效率

理解Java序列化

房东的猫 提交于 2020-12-16 06:38:43
前言 Java对象是在JVM中产生的,若要将其进行传输或保存到硬盘,就要将对象转换为可传输的文件流。而目前Java对象的转换方式有: 利用Java的序列化功能序列成字节(字节流),一般是需要加密传输时使用。 将对象包装成JSON字符串(字符流),一般使用JSON工具进行转换 。 protoBuf工具(二进制),性能好,效率高,字节数很小,网络传输节省IO。但二进制格式可读性差。 一、序列化基础 序列化:Serialization(序列化)是一种将对象以一连串的字节描述的过程 反序列化:反序列化deserialization是一种将这些字节重建成一个对象的过程 序列化机制算法: 所有保存到磁盘中的对象都有一个序列化编号 当程序试图序列化一个对象时,程序先检查该对象是否已经被序列化过。如果从未被序列化过,系统就会将该对象转换成字节序列并输出;如果已经序列化过,将直接输出一个序列化编号。 1、应用场景 持久化对象 :把对象的字节序列永久地保存到硬盘上 Java中能够在JVM中创建可复用的Java对象,但只用JVM运行时,对象才能存在,即对象的生命周期不可能比JVM生命周期更长。但实际情况可能遇到需要当JVM停止时也需要对象依旧存在,因而就需要对对象进行持久化,并在JVM停止的情况下,能够对保存的对象进行持久化。 对象复制 :通过序列化,将对象保存在内存中