![](https://img-blog.csdnimg.cn/2019101511295749.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
基础
南丘xf
好记性不如烂笔头——1枚昆明程序猿
展开
-
设计接口,保证幂等性是基本的要求,那么关于幂等性,一般接口应该如何设计?
什么是接口幂等性?接口幂等就是无论客户端调用服务端接口多少次,有且只有一次有效。比如保存信息时候,不管是因为重复点击或者网络重发等,我们只能存储一条,也就是保证一次生效,针对这个设计,就是所谓的接口幂等性要求,一般会造成这个问题的原因有哪些呢?1)短时间内极速点击提交按钮(点击两次及以上);2)点击刷新按钮;3)使用浏览器后退按钮重复之前的操作,导致重复提交表单;4)使用浏览器历史记录重复提交表单;5)浏览器重复的HTTP请;6)nginx重发等情况;7)分布式RPC的try重发等;原创 2021-05-12 14:49:24 · 561 阅读 · 0 评论 -
为什么要了解Jdk1.8,我用亲身经历告诉你
有一个同事写的一个项目,因为手上比较忙,让我临时帮忙,需要做的事情是这样的:数据库中某个字段值存的是Json字符串,这其中包含了问卷信息Json,我需要统计其中选项的累计票数,按道理而言,不是很难,但是我拿到了项目,还是有一瞬间愣神,比如该字段值的字符串如下:[{ "title": "您最喜欢的社团", "type": 0, "selects": [{ "value": "轮滑社" }, { "value": "篮球协会" }, { "value": "羽毛球社" }, {原创 2021-02-09 17:41:42 · 786 阅读 · 0 评论 -
Apache Shiro反序列化高危漏洞升级,结果导致org.apache.shiro.crypto.CryptoException: Unable to acquire a Java JCA
突然接到一个通知,关于Shiro RememberMe 1.2.4反序列化高危漏洞加固整改的通知,要求对一个老系统进行整改。这个漏洞的危害以及影响范围是什么呢?因为Shiro默认使用“CookieRememberMeManager”,其在处理cookie的流程中,使用了AES加解密,但是,AES的密钥却是硬编码的,导致攻击者可以构造恶意数据,造成反序列化的远程命令执行漏洞,获取目标系统控制权限,Shiro1.2.4及以下版本都受该漏洞影响,如何解决呢?1.升级Shiro版本至1.2.5及以上2.修改原创 2020-12-03 11:19:35 · 1573 阅读 · 0 评论 -
git pull或者git push时,为什么要每次都输入用户名和密码?
使用git pull或者git push命令时,竟然提示我输入用户名,用户名输完以后,弹窗提示输入密码,等我把代码拉下来以后,要提交的时候,又提示要要输入用户名和密码,真是贼烦,如何解决这个问题呢?输入命令:git config --global credential.helper store上面这个该命令会在你本地生成一个文本,上边记录你的账号和密码。然后接下来,再操作一次git pull或者git push命令,然后此时会提示输入用户名和密码,这一次输入以后,以后就不需要原创 2020-10-28 09:32:14 · 2229 阅读 · 0 评论 -
如何用git命令提交本地修改到远程分支?
因为早期用的都是SVN,对git命令就不是很熟悉,用起来还不是很顺畅,因为是程序猿节,就祝大家节日快乐了,趁着这个机会,简单地说下,如何用git命令提交本地修改到远程分支。因为早期用SVN,所以就间接地养成了一个习惯,喜欢用比对工具,代码喜欢用两份,怎么说呢?比如,用git从远程拉取了文件以后,我会把这个拉取的文件新复制一份到另外一个文件夹,再用编译工具进行导入开发,开发完毕调试以后,用比对工具进行比对,把需要提交的先存到本地仓储。1、git status 查看本地修改具体状态如下:1.原创 2020-10-24 14:48:15 · 2170 阅读 · 1 评论 -
简单地说下Java中的三目运算
三目运算在Java中算是比较常用的,对于一些分支判断,这个会非常适用,三目运算:表达式1?表达式2:表达式3;表达式1为true,取表达式2表达式1为false,取表达式3(a<b)?a:b -- 如果a<b为真,取a值,否则取b值。为什么要说下三目运算呢?今天遇到了一个很有意思的问题,一个新同事需要组装数据传送,每一行数据的每一个字段之间采用|@|作为分隔符,结果后面生成的文件,分隔符个数不对,由于每一行大概有100多个分隔符,他就懒得一一对比,我去看了一眼代码,便大概知道问题原创 2020-09-11 11:01:52 · 700 阅读 · 0 评论 -
FileWriter追加文件写入遇到的坑,默认是ISO-8859-1 或者 US-ASCII编码
一个同事需要把一个对账文件进行筛选,推送给第三方,很有意思的问题是,该第三方明确要求每一行文件必须固定长度,按照gbk进行编码,而且每一天的对账文件不管多大,尽量筛选控制在一个txt文件中,然后进行压缩传送,本来是挺简单的一件事,结果遇到了编码问题,第三方说我们的长度有问题,那同事说没问题,我检查了,代码中都是gbk编码,没有用到utf-8编码的,我去看了一眼,搜索了一下,的确代码中没有utf-8编码,但这还不足以打消我的疑虑,我继续追踪代码:InputStreamReader inputReader原创 2020-08-14 09:54:07 · 1054 阅读 · 0 评论 -
校验参数是否为空,但是参数个数不确定的工具类如何写?
今天一个同事问了一个问题,我回单(报文)给对方,但是对方会对一些参数进行校验,校验失败,就不签收,但是这个参数有时候会是两个,有时候会校验三个,不确定参数个数,我想写一个工具类,用以满足这个情景,校验不过关的,就不调接口进行签章发送,问这个工具类应该如何写?如果不封装一个工具类,那么可能就会频繁地在if处进行判断更改,比如像这种:if(StringUtils.isNotEmpty(a) && StringUtils.isNotEmpty(b) && ……){}原创 2020-07-08 11:12:03 · 722 阅读 · 0 评论 -
Java中war包项目生产中应该如何变更?
因为一个新来的小伙伴参与的一个项目,在我不知情的情况下上线了,他的上线方式非常粗暴,开发调试好以后,直接打了一个war包丢上去,结果导致项目不可用了,前面两天,我都在调试这个项目,所以我觉得有必要说一下,针对这种Web项目的变更,应该采取什么方式为妥。一般而言,使用springBoot进行项目开发,都会考虑使用多环境配置,一个程序的正常配置,应该是有3份,分别是dev、test和pro,配置格式需要满足application-{profile}.properties的格式,其中{profile}对应你的原创 2020-06-11 11:35:07 · 524 阅读 · 0 评论 -
什么是try-with-resources?
之前有博客说过IO流关闭工具类,即IOCloseUtil,可即便用了工具类,大多时候,我们关闭流释放资源的时候,还是要采取try-catch-finally的方式,比如像这种:public void readTxt() { FileInputStream fileInputStream = null; try { fileInputStream = new FileInputS...原创 2020-04-08 15:12:05 · 306 阅读 · 0 评论 -
什么时候该用类方法(静态方法)?什么时候该用实例化方法?
一个新来的同事,写Java方法时,通篇都是static修饰,原因只是因为不需要new对象就可直接调用。一个类中抽象出来的方法,用static修饰无可厚非,但是一般而言,抽象出来的公共方法,大多都应该放在util工具类中,而不是直接写在该类中。static修饰的静态方法,虽然调用简单而且也快,但是实际编程中,不建议这么做。这并非是因为静态方法占用内存更高,而是因为我们只有理解其原理,才能更好地应...原创 2020-03-23 23:06:45 · 7113 阅读 · 0 评论 -
开发中你不得不知的一些英文缩写(专业术语)
前面才更新了一篇关于Dubbo基础知识的文章,今天看到一个问题,你最了解的RPC框架是什么?立马就蒙圈了,RPC指的什么玩意儿?你要问分布式开源框架,我肯定知道啊,所以,单独开一篇博客,用以记录这些英文缩写所表示的含义。IDE:集成开发环境(Integrated Development Environment )JDK:Java开发工具包(Java Development Kit)J...原创 2020-02-28 17:31:22 · 2973 阅读 · 1 评论 -
Java分批次处理File文件,固定行数为一个批次
接着前面那个案例,我们有一个file文件,里面有a b c d e f g h i j 一共10条数据,我们需要以4条为一批,分成3批处理,即第一批是a b c d,第二批数据是e f g h,第三批数据是i j,所以按照这样的逻辑,之前的思路是采用采用Map<Integer, List<TSSBBody>>方式装数据,有多少批数据,就有多少个键值对,至于List的size...原创 2020-01-19 09:42:41 · 2007 阅读 · 0 评论 -
手机号正则校验表达式该更新啦
今天有个同事调休,他负责的一个项目出现了一点问题,有用户反馈他的手机号总是获取不到信息,我让他提供了一下手机号,是1998785****,在查看了一下日志,发现提示手机号是错误格式!然后我找到了项目源码,发现他用的正则表达式是这样的:public static boolean PhoneIsTrue(String phone) { String regex = "^1[3|4|5|7|8...原创 2020-01-17 11:18:31 · 1034 阅读 · 0 评论 -
Java使用LineNumberReader读取文件指定行遇到的坑
在利用LineNumberReader读取文件指定行的时候,遇到了一个很有意思的问题,该问题极易忽略,而且极易犯错,先看代码:// 文件内容的总行数 static int getTotalLines(File file) throws IOException { FileReader in = new FileReader(file); LineNumberReader reade...原创 2020-01-17 09:55:16 · 4377 阅读 · 2 评论 -
时间格式:yyyyMMddhhmmss的大小写需要特别注意
由于年末,某个项目需要查账,该同事离职了不久,我便被分配取协助机构部同事查款,从该项目里取出详细流水,再和机构部同事取的账户流水对比,结果傻了眼,两边时间对不上,一个是24小时计时,而该项目里边竟然用的是12小时计算,不禁有些傻眼。找到源码,发现sdf.format(new Date())时候用的时间格式表达式竟然是这个:yyyyMMddhhmmss!!这实在是一个低级错误,时间格式表达式的大...原创 2019-12-26 16:34:04 · 16331 阅读 · 0 评论 -
内存骤增不降,如何利用MAT工具分析代码性能?
大多数初学者编程都会犯一些非代码规范的错误(隐形错误:忘关IO流、死循环……),这就会导致对内存占着一些无用的资源而无法释放,导致CPU一直处于高占用率,就是重启Java进程,还是无法解决这个问题。一般公司,都有一套监管服务器的预警系统,一旦CPU使用率达到某个警戒值或者磁盘空间达到警戒值,就会预警,一般的处理方法有以下几种:1、重启Java进程(能够释放大部分Java占用的内存)2、重启服...原创 2019-12-25 15:16:24 · 1116 阅读 · 0 评论 -
如何用JMeter做接口压力测试(以天气查询接口为例)
对于Java编程来说,面向对象编程是我们最开始接触编程的思想,随着经验的积累,我们可以说,在实际开发中,大多都是面向接口编程。这一定程度上反应了接口的重要性,无论是调用别人接口,还是我们提供了接口给前端或者其他人员,都有必要用工具测试一下接口所能承受的压力(压力测试)。压力测试是非常有必要的,尤其是Web应用程序,上线之前都需要做压力测试,压力测试可以帮助我们发现系统瓶颈问题,减少发布到生产环...原创 2019-12-16 15:42:03 · 2532 阅读 · 0 评论 -
Http协议常见响应码
在http通讯协议中,我们常常遇见404、500等错误,有时候还会遇到200(跨域的时候最常见)等状态码,那么,http常见状态码有哪些呢?分别代表什么意思?1)1xx--临时响应:表示临时响应并需要请求者继续执行操作的状态代码100:(继续) 请求者应当继续提出请求,服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。101:(切换协议) 请求者已要求服务器切换协议,服务器已确...原创 2019-12-10 09:29:15 · 3459 阅读 · 0 评论 -
判断农历日期的Java工具类
昆明这边大多数地方,像婚礼、节假日等等,用的还是农历的计算方法,比如哪家姑娘要嫁人了,都是这样通知对方的:"腊月二十一呢来我们家吃饭。。。。"千万别以为说的是12月21日。。再比如过生日,相信还有不少人还是以农历为主。。。那么,如何根据日历计算农历呢?现在我就贴上一个工具类代码:import java.text.ParseException;import java.text.Simpl...原创 2019-12-06 16:38:22 · 1249 阅读 · 0 评论 -
推荐一个好用的Java工具类库Hutool
闲暇之余,打算整理一下自己所用的Util类,方便以后用,结果一个同事见到,就说整理这个干啥呀,推荐你一个好用的Java工具类库————Hutool,码云上一搜,这项目的确可以。如果懒得看源码,那我们先下载jar包,下载地址:https://download.csdn.net/download/weixin_39841882/11464665下载好jar包以后,我们就做一个简单的小测试,先打开A...原创 2019-12-04 08:47:57 · 2513 阅读 · 0 评论 -
Java编程中为什么使用枚举(Enum)(禁止硬编码)?
为了图快,很多人在编码过程中,常常使用硬编码(我们说的写死),尤其是一些新手,这是编程规范的大忌。因为别人接手或者自己后期维护的时候,常常脑壳疼。比如说用了数据字典,你若写死,就真的要命了。谁知道你写的一大堆1呀2呀之类的代表什么?若没有数据库设计说明文档,估计基本上只有写代码那个人自己才看得懂。所以,为什么要使用枚举呢?我们先看这样一段代码:public enum Organizatio...原创 2019-11-21 09:58:49 · 2296 阅读 · 0 评论 -
阻塞IO模型经典例子:data = socket.read()
进入11月份以来,忙得焦头烂额,临近年底就开始进入对账节奏,各种查错纠错,加之又负责一个离职同事的项目,一直没时间更新博客。今天遇到了一个很有意思的问题,一个实习生用socket通讯的时候遇到了java.net.SocketTimeoutException:Read timed out异常,指点他以后,顺便讲讲这个东西。我们都知道,利用Socket读取数据一般有两种方法:1)按照字节流读取(Bu...原创 2019-11-20 10:51:13 · 1148 阅读 · 0 评论 -
面试题:判断一个数是否是完全平方数
判断一个数是否是完全平方数,方法有好几种,但是我们最常用的,就是对该数的一半的数做平方运算,运算结果和该数相同,就认为该数是完全平方数,但是该方法的时间复杂度不太友好:public static void main(String[] args) { System.out.println(lowIsSquare(16)); } /** * num一半的整数做一次平方运算,如果某一...原创 2019-10-24 11:06:14 · 2823 阅读 · 0 评论 -
数据库设计说明文档自动生成(支持Mysql、Oracle和Postgres)
作为程序猿,写文档是必备的技能之一,可是大多数程序猿,都讨厌写文档,尤其是数据库设计说明书,因为这实在是一件费劲的事情,大多时候,程序出了Bug,都是直接调整数据库,增删改字段,时间久了,数据库文档就没人维护,就失去了参考意义。所以,能不能每次需要数据表设计说明文档时(领导要求或者其他需要),不再手写或者手动维护,而是能够自动导出呢?今天发现了一个比较厉害的项目,码云地址:https://git...原创 2019-10-22 10:42:11 · 2102 阅读 · 0 评论 -
程序猿必备工具或者技术论坛推荐(收藏)
一 搜索引擎秘迹搜索:https://mijisou.com(个人觉得比度娘好用,最最重要的一点是,该搜索引擎不会收集私人信息)DogeDoge(多吉搜索):https://www.dogedoge.com/(国内的谷歌,侧重知乎、博客园、CSDN等技术点,关键是没广告,没广告)二 常用工具优品PPT:http://www.ypppt.com(免费PPT模板...原创 2019-12-18 10:39:16 · 1867 阅读 · 0 评论 -
Java如何连接远程服务器取文件(通过SCP协议)
引用Jar包名:ganymed-ssh2-build210.jar 直接上代码,配置文件hostConfig.properties:IP=128.1.136.128PORT=22CHARSET=GBKTIMEOUT=96000USER=socialPASSWORD=socialDOWNPATH=/home/social/down读取配置文件工具类PropertyUtils....原创 2018-12-19 14:36:00 · 1315 阅读 · 0 评论 -
MyBatis代码生成器自动生成Entity+Dao+Mapping
MyBatis属于一种半自动的ORM框架,它需要程序员自己编写sql语句和映射文件,但是编写映射文件和sql语句很容易出错,所以mybatis官方提供了Generator生成器,自动生成Entity+Dao+Mapping。该生成器是根据单表自动生成mybatis执行所需要的代码。因此,首先创建数据库表:DROP TABLE IF EXISTS `t_letou`;CREATE TAB...原创 2018-10-22 15:16:00 · 261 阅读 · 0 评论 -
如何在Linux下启动一个Java main()进行测试?
在编程过程中,我们常常会启动main()进行测试,但是由于Linux测试不一定能时刻模拟生产环境,所以如果需要去Linux测试机上进行代码测试,比如测试网络访问或者接口等等,我们是不是需要用Tomcat做服务,启动一个线程或者自动任务去访问?其实没必要,还记得如何在Windows下执行.java文件吗?public class Hello { public static void mai...原创 2019-10-12 14:11:56 · 6029 阅读 · 0 评论 -
Spring常见面试题(String、StringBuffer和StringBuilder)
1、java 中操作字符串都有哪些类?它们之间有什么区别?操作字符串的类有:String、StringBuffer、StringBuilder。String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象(final修饰),每次操作都会new String() ,然后将指针指向该对象,而 StringBuffer、StringBuil...原创 2019-10-12 10:53:32 · 715 阅读 · 0 评论 -
IO流关闭工具Utils
在Java读取文件的操作中,一定会用到try{}catch(IOException e){}代码块,最后用finally {}块判断IO流是否为Null,不为Null则close。如果一个类中有多个IO流操作方法,那么关闭流的代码块,就会显得臃肿多余。public static String ReadTxtString(File file) throws IOException { In...原创 2019-09-26 15:41:29 · 881 阅读 · 0 评论 -
统计字符串出现次数:子字符串在母字符串中出现几次
一位同事在做项目的过程中,需要按行读取txt文件内容,然后判断某个字符串在该行中出现了几次,如果次数超过3次,则做特殊处理。他写的代码大致如下:public static int count(String str, String subStr) { int count = 0; String[] arr = str.split(subStr); int len = arr.len...原创 2019-09-27 11:33:15 · 2295 阅读 · 0 评论 -
String.length()和String.getBytes().length的用法讲解
新来的一同事(Java开发),需要完成这样一个功能:组装8位xml长度(不足8位补空格)+8位交易标识符+xml报文,通过socket发到特色服务器(该服务器是C语言),该服务器接收到该xml报文以后,根据传送过去的长度解析xml,发现总是少了几位(银行截取字符串是按照该同事报文头传过去的报文总长度计算的)。该同事通过比较,发现计算出来的长度人为+24,对方就能够解开,便问为什么socket传输过...原创 2019-04-08 18:35:00 · 4555 阅读 · 1 评论 -
继承(Extends)常见面试题
我们都知道,使用继承可以实现代码的重用。通过继承,子类可以继承父类的成员变量及成员方法,同时还可以定义自己的成员变量和成员方法。所以,通过继承,子类将具有父类的成员及本类的成员——Java语言不支持多重继承,即:一个类只能继承一个父类,但一个父类可以有多个子类。public class Father{ Cell[] cells; public Father() { ...原创 2018-08-24 10:34:00 · 415 阅读 · 0 评论 -
FastJson存在漏洞,该漏洞影响Fastjson 1.2.60之前所有版本
接到总行通知,FastJson被发现存在远程拒绝服务漏洞,攻击者即可通过精心构造的请求包对使用Fastjson的服务器造成远程拒绝服务攻击,可导致服务器宕机,目前确认该利用方式影响FastJson <1.2.60 版本。据悉该漏洞已在2019年9月完成修复,漏洞利用方式已于2019年9月5日开始被公开。由于目前该漏洞的风险等级被定义为“高危”,所以总行给了修复建议:要求受影响版本升级...原创 2019-09-11 15:14:56 · 4644 阅读 · 0 评论 -
不用写Getter和Setter方法的代码简洁神器:Lombok
以前因为借助编译工具的缘故,不觉得写getter/setter和toString方法有多麻烦,直到看到一个同事写的一个Entity,足足一百多个字段,而且还可能会经常修改,不禁头大。上网一查,才知道有Lombok这种神器(原谅我今天才知道有这个好东西)。Lombok能干什么呢?可以说,Lombok就是代码简洁神器,Lombok可以通过注解的方式,在编译的时候自动为Javabean的属性生成get...原创 2019-09-09 16:33:10 · 477 阅读 · 0 评论 -
Runtime类freeMemory()、totalMemory()、maxMemory()详解
Runtime类实例能够使应用程序与其运行的环境相连,在Java中,我们用其来获取JVM信息(JAVA程序启动了一个JVM进程),每一个JVM进程都对应一个Runtime实例,但是应用程序不能自己创建Runtime类实例,需要通过getRuntime()静态方法获取当前运行时机制(Runtime)。public static void main(String[] args) { Runt...原创 2019-09-04 16:46:30 · 2745 阅读 · 0 评论 -
Java如何调用CMD命令?
1、什么是CMD命令?简单说,就是运行,按住Windows+R键,弹出框中输入cmd,即可执行命令,常见的CMD命令有:1. gpedit.msc-----组策略2. sndrec32-------录音机3. Nslookup-------IP地址侦测器4. explorer-------打开资源管理器5. logoff---------注销命令6. tsshutdn------...原创 2018-10-16 16:42:00 · 1215 阅读 · 1 评论 -
验证本机(windows7)相应工具是否安装成功命令
1、验证JDK是否安装成功1)windows+R键------输入cmd命令------输入java -version2、验证Tomcat是否安装配置成功1)切到Tomcat的bin目录,复制路径2)windows+R键------输入cmd命令------进入tomcat的bin目录3)输入service.bat install命令4)bin目录下,点击启动tomcat7w.e...原创 2018-09-28 10:21:00 · 1552 阅读 · 0 评论 -
Java书单推荐(珍藏)
本文主要推荐一些笔者看过觉得不错的书单,从简到难,且持续补充,另附上资源提取码,有需要的童鞋,可以自行提取书单分享链接如下:链接: https://pan.baidu.com/s/175j3ugvPZsZ2CvIih1xcwA 提取码: jbx2 基础篇《Java面试宝典Beta5.0》对于刚步入编程行业或者准备换一份工作的童鞋,非常推荐这本书,总结非常到位,相当于Java面试...原创 2018-09-18 08:59:00 · 1164 阅读 · 0 评论