技术文档
文章平均质量分 85
程序猿洞晓
不忘初心,方得始终。
展开
-
通过不同的方式实现多字段联合排序效果
说到排序让你想起的是冒泡排序法、归并排序法、选择排序法等,但是这个是基础的排序方法,在实际的应用基本用不到,就算用到也是被包装到底层,无需自己的实现。下面就说几种在实际应用中使用到的排序方法。问题场景现在需要对一个班级的人员进行排序,排序的规则是优先按照年龄排序,当年龄相等时,采用学生的身高排序。问题就是这样,你们想到几种排序的方法呢?通过SQL语句排序数据库中存储班级学生的信息,包含年龄和身高,通过SQL语句实现,很简单如下:select * from t_student order by a原创 2022-04-12 15:29:10 · 2007 阅读 · 0 评论 -
面试题系列(四):Java的基础知识面试考点精华(线程池、JVM……)
金三银四人才招聘的高峰期,渴望跳槽的朋友肯定跟我一样四处找以往的面试题,但又感觉找的又不完整,在这里我将把我所见到的题目做一总结,并尽力将答案术语化、标准化。预祝大家面试顺利。建议:术语会让你的面试更有说服力,让你感觉更踏实,建议大家多记背点术语。java线程池用过没有?Executors提供了四种方法来创建线程池。newFixedThreadPool() :创建固定大小的线程池。newCachedThreadPool(): 创建无限大小的线程池,线程池中线程数量不固定,可根据需求自动更原创 2022-03-22 09:03:37 · 192 阅读 · 0 评论 -
面试题系列(三):Java的基础知识面试考点精华(Collection、Map、Thread……)
简单说一下什么是跨平台术语:操作系统指令集、屏蔽系统之间的差异由于各种操作系统所支持的指令集不是完全一致,所以在操作系统之上加个虚拟机可以来提供统一接口,屏蔽系统之间的差异。Java有几种基本数据类型有八种基本数据类型。数据类型字节默认值byte10short20int40long80float40.0fdouble80.0dchar2‘\u0000’boolean4false注意:这里在bo原创 2022-03-22 09:03:29 · 221 阅读 · 0 评论 -
面试题系列(二):mybatis的Mapper接口实现过程和字符串组装实现方式
这篇文章说的到内容不是很难,但是在实际开发场景中经常用的,并且很容易会被问到的。下面一起看看今天要说的两道面试题。Mapper只是一个接口并没有具体的方法实现,它是如何实现数据操作的?在mybatis中对Mapper虽然是接口类,没有具体的实现,但是在mybatis的执行过程中,通过了动态代理的方式生成了对应的代理对象,在mybatis的binding包下面有主要的几个类分别是MapperMethod、MapperProxy、MapperProxyFactory和MapperRegistry。在Mapp原创 2022-03-22 09:03:20 · 1060 阅读 · 0 评论 -
面试题系列(一):数据的比较和基本类型的拆装箱
面试题系列早就想着要写,但是一直没有下笔,感觉不好写,因为写的浅了没有意思,也没有多大的参考价值,如果写的深了,一篇博客的篇幅只够写一道面试题,这个大篇幅的写就失去了写面试题系列的意义,还不如一篇一篇的写。纠结了很久还是决定开始写,在写的过程中细节的部分能省就省,尽量言简意赅,留给看的人更大的思考空间。在此立碑,如果细节不到的,请多多包涵。==和equals的区别这个问题博主曾经在刚入行的时候被问过,简直被问的一脸懵逼,现在回头来看,其实并没有那么难,只要知道==是比较地址值,equals比较是equa原创 2022-03-22 09:03:11 · 125 阅读 · 0 评论 -
项目上线,旧数据需要修改,写SQL太麻烦,看Excel配合简单SQL的强大功能
实际场景A项目前期上线后有两张表,第一张表里面有订单的基本信息(重点:没有订单完成时间),第二张表记录订单的流程节点信息,如买车这个订单,走的流程节点有交定金、交首付、贷款申请、贷款审批……取车,每个节点都有开始时间和完成时间记录,当所有节点都完成后,会自动将订单的状态更新为完成状态。后期迭代需求生成报表,需要统计订单整个执行流程的时间。那么这个时候的基本构思就是取订单的创建时间为开始时间和最后一个节点的完成时间作为结束时间计算执行流程时间。这样不太方便,为了更好的利于报表统计,需要在订单表中加一个完成时原创 2022-03-22 09:02:49 · 409 阅读 · 0 评论 -
项目发布成功、失败,Java项目来实现邮件通知相关人员,实时反馈提醒信息
场景说明在开发的流程中必须涉及的项目的部署发布,这个过程也肯定会有成功、失败,作为开发能够实时的得到反馈是很有必要的,在不同的公司里采用的提醒方式不同。在说明下面的方案前,需要首先说明一下基本应用的场景。纯后台应用,现在项目基本都是前后端分离,因为一个前端服务可能会对应多个后端服务的支持,随着整个开发大环境的完善和技术的成熟,之前那种前后端耦合的应用很少,这里不在做具体的考虑。项目的基本架构是Spring+Spring MVC+Mybatis,其实主要是Spring+Spring MVC,因为原创 2022-03-22 09:03:02 · 697 阅读 · 0 评论 -
Spring AOP+反射实现自定义动态配置校验规则,让校验规则飞起来
场景小计之前项目都是使用hibernate-validator来校验参数,但是实际上会出现一些小问题,就是校验规则都是通过注解的方式来完成,这样如果项目上线了,这个参数校验规则就没办法修改,如果出现校验规则问题,就必须修改后重新紧急上线(之前手机号码格式校验就出现过这个问题,因为新的号段不支持)。为了适应动态配置校验规则,在新起的项目我们就不再使用hibernate-validator校验规则,而是自己写个小功能来实现。附加说明:如果在项目中对校验规则修改要求不是很高的,建议不要使用动态,乖乖使用hib原创 2022-03-21 08:57:52 · 1295 阅读 · 0 评论 -
发送邮件的JavaMail和Spring提供的MailSender比较分析
发邮件,项目的必备功能之一,如果一个稍微模块化一点的公司,一般会单独出来一个项目专用来做公司的发送信息的功能,当然这个发送信息中不止包含发邮件,还会有短信、APP push等。这篇聊聊推送邮件。在以前的开发中,公司用Java mail的比较多,由自己来写邮件的组装和发送功能,但是Java mail使用操作比较繁杂,后来渐渐的都开始使用spring提供的JavaMailSender工具来实现,用过的都知道,这叫一个爽,执行几个set、add操作,一个复杂的邮件就可以发送出去,但是在业务代码中发送邮件的位置很原创 2022-03-21 08:57:14 · 2227 阅读 · 0 评论 -
项目中手机、姓名、身份证信息等在日志和响应数据中脱敏操作
项目日志打印请求的入参和出参,用来跟踪数据信息,方便根据日志信息排查问题,在涉及到用户敏感信息的时候,为了安全的考虑,不能直接将这些信息直接输出到日志文件中,需要做脱敏操作。如果这个脱敏操作放在项目的业务代码中,只要出现需要脱敏的信息就进行一次脱敏操作,这样会有很多脱敏的代码冗余;如果将脱敏的逻辑代码提出来,在需要脱敏的位置调用此段逻辑代码,也会比较麻烦,有可能会造成漏掉的问题,写起来也是很麻烦。这里最好的方法莫过于使用切面,通过对请求的出参入参进行切入,并将敏感信息做脱敏操作后输入到日志文件中。这样的好处原创 2022-03-21 08:56:48 · 1312 阅读 · 0 评论 -
xshell、CRT上使用vbscript更高效连接定位到服务器以及目录、数据库
这篇文章分享一个好用的脚本,用在xshell和CRT上,真的很爽,也是简单的不要不要的。当负责的项目有多个环境,看日志需要到Linux环境下,数据库也不能用navicat等工具连接,这个时候只能使用xshell或者CRT进入对应的机器,但是这里存在的麻烦就是机器太多(测试环境、演示环境、生产环境),每次都要用ssh命令在不同的机器之间跳来跳去,很麻烦。因此这里可以用vbscript来让这些操作不再麻烦,直接自动操作即可。vbscript在xshell软件上的脚本vbscript在xshell和CRT上原创 2022-03-21 08:56:37 · 828 阅读 · 0 评论 -
参数校验之Hibernate-validator的基本使用
Hibernate-validator是对validation-api的再次封装,在开发过程中是经常使用到(spring boot里面的spring-boot-starter-web是默认应用了Hibernate-validator包的),特别是参数校验,刚开始做开发工作的时候,都是在Service层用if…else…来判断参数的合法性,这个会使代码显得很臃肿,后来接触Hibernate-validator,真的是很好用的。这里分享出来,也是做个笔记,以后用到可以作为参考资料。validation常用的注原创 2022-03-20 12:39:29 · 5913 阅读 · 0 评论 -
Idea自带的http client工具使用攻略
平时都是用postman来调接口,有时候也会用到swagger。用swagger还可以,直接在浏览器上开个页面即可,但是postman就不行了,需要单独的运行,个人感觉postman还是比较占内存的。最近和一个其他组同事联调,发现他们使用的是idea自带的HTTP Client工具,感觉挺好用的,调接口不需要切浏览器,切应用。直接在idea中可以完成。挺酷(zhuang)炫(bi)的,所以准备学习一下,在网上也找到了这方面的很多文章,在研究的时候都有借鉴,多谢各位爱分享的博友们。界面化调试界面化操作很简原创 2022-03-20 12:39:08 · 19768 阅读 · 2 评论 -
字符串split操作到底有多少坑
长字符串切分,取其中元素封装或者将封装信息组合成长字符串都是常规操作,但是这种长字符串往往是不可控的,如一个长字符串就是由一个元素组成,或者存在空字符串的元素,看似这并没有什么问题,但是使用不同工具类的split方法进行切分结果是完全不同的。不知道你是否遇到这样的坑,下面一起来看看。String类自带的split方法直接使用String本身自带的split方法,看对不同字符串的切分结果。没有分隔符的字符串//str = "1"public static void split2(String s原创 2022-03-20 12:39:00 · 1169 阅读 · 2 评论 -
论接口原子化和简单化的重要性
这篇文章咱们不说技术,而是来说说接口的设计,最近在做一个项目,遇到一个产品设计的问题,对前端的交互、后端实现带来很大的麻烦。在产品经理提出这样做的时候我就提出了很强的异议,但是技术经理觉得这样在技术上实现没有任何问题,最后只能屈服,完成这个功能的开发,现在随着版本的迭代,问题慢慢被放大,不但界面交互很low,后端数据存储和关联也隐藏了弊病。接下来就详细说一下这个过程,然后说说我对接口要原子化、简单化重要性的理解。我们项目是这么做的这里涉及到公司项目机密,内容不能外泄,这里我就以示文字描述来说。废话不多原创 2022-03-20 12:38:51 · 1690 阅读 · 2 评论 -
前端下拉列表后端配合枚举处理技巧
在实际项目开发中经常会遇到前端下拉列表和后端交互的方式,这样的有两种实现解决方案。第一种是前后端约定好,前端写死,不好的地方就是发生变动,前后端都要重新发版上线,耦合性太高;还有一种就是全权委托给后端处理,下拉列表数据也是后端处理好给到前端,如果发生变动只需要后端发版即可。对于灵活性、可维护性肯定是第二种更好一点,这里就会涉及到后端如何存储这些下拉列表数据,数据库存储还是枚举?数据库存储还是枚举这个问题其实很简单,看项目的需求,这样说法很敷衍,但是事实也是这样的,如果这些下拉列表项经常变,数据库维护会更原创 2022-03-20 12:38:34 · 5217 阅读 · 0 评论 -
在一台电脑上配置多个git账户解决方案
最近遇到一个问题,我自己个人有一个码云的代码托管仓库,平时我自己的电脑直接配置账号拉取代码即可,但是现在需要用自己的电脑,开发公司的项目,这个时候就需要在电脑上使用不同的git账户,在度娘上找了很多解决方案,没有遇到完整可用的,经过使用总结和调试,得出以下配置方式,适用于第一拉代码和第一次提交代码。生成秘钥我自己本身就有一个git账户,账户的私钥公钥都是按照默认方式生成的,不做赘述。接下来为生成第二个账号公私钥的操作方法。首先生成一个git账户对应的公钥和私钥ssh-keygen -t rsa原创 2022-03-20 12:37:43 · 1057 阅读 · 0 评论 -
SpringMVC注入参数时为什么必须要在注解中写变量名
存在的问题:在SpringMVC注入参数的时候,如@PathVariable、@RequestParam注解,我们都必须想下图中的格式书写,可能会有人存在疑问,为什么变量名和传递的参数名相同,还需要在注解中重复的写变量名呢?这个可以完全可以省略不写的。其实这个观点是错误的,这里我会给大家说明这是为什么。 分析:我们在编写代码的时候使用的Eclipse或者MyEclipse开发工具,这些开发原创 2015-10-12 10:38:21 · 14327 阅读 · 0 评论 -
spring自带的定时器@Scheduled
多谢好友分享:spring自带的定时器@Scheduled转载 2016-04-10 15:35:59 · 478 阅读 · 0 评论 -
solr连接数据库,实现数据定时同步(个人项目经验)
在项目开发过程中为了提高查询效率和降低数据库的压力,因此此时就将查询量大的数据放到solr中,查询从solr中执行,不走数据库,但是数据库数据修改后怎么办呢,此时就要实现solr连接数据库,实现数据的定时同步,保证数据的一致性。solr的搭建看我上一篇博客吧,直接进入主题。第一步:添加data-config.xml配置文件并编辑内容,这个文件和schema.xml在同一级目录:原创 2016-05-18 17:54:17 · 18375 阅读 · 9 评论 -
项目上线,旧数据需要修改,写SQL太麻烦,看Excel配合简单SQL的强大功能
原文作者:弥诺R 原文地址:http://www.minuor.com/1523882302/article 转载声明:转载请注明原文地址,注意版权维护,谢谢!实际场景A项目前期上线后有两张表,第一张表里面有订单的基本信息(重点:没有订单完成时间),第二张表记录订单的流程节点信息,如买车这个订单,走的流程节点有交定金、交首付、贷款申请、贷款审批……取车,每个节点都有...原创 2018-04-18 08:51:29 · 1409 阅读 · 0 评论 -
手机web页面调用打开QQ聊天功能(个人项目经验)
在实现手机web功能时候,会出现咨询页面客服的需求,此时客服使用的是QQ方式交流,就要求能够调用手机QQ的聊天功能,这个其实很简单,希望下面的分享会对各位博友有用。在代码中添加点击事件:咨询客服在js中添加时间具体实现:function chatQQ(){ /*1234567对应的就是需要聊天的客服*/ window.location.href = "mqqwpa://im/c原创 2016-03-11 18:06:43 · 17568 阅读 · 2 评论 -
maven聚合工程的创建和聚合工程的打包
第一步:创建父工程millery-manage,如图:右击空白处,new创建新maven工程:这里跳过默认的骨架,使用自动义的骨架 这里父工程必须使用pom打包方式 第二步:创建子工程右击父工程,创建maven module工程: 跳骨默认骨架,输入子工程名 定义子工程,这里是以表现层为例,是web工程,所以打包方式为war,如果是其他非web工原创 2015-09-23 11:21:21 · 29887 阅读 · 9 评论 -
maven执行install命令出现-Dmaven.multiModuleProjectDirectory system propery is not set. 问题的解决
问题:maven执行install命令,控制台出现的错误 这个开始遇到很揪心,maven的环境变量已经配置好了,但是一直报这个错误,最后在网上找到了这个问题的答案,我自己将其整理一下,希望对大家有帮助。解决:第一步:配置maven的环境变量配置maven环境变量和配置jdk的环境变量基本相同 第二步:在eclipse中加入环境变量的配置首先进入preferen原创 2015-09-18 10:05:40 · 13061 阅读 · 0 评论 -
Redis缓存和RabbitMQ消息解决购车问题(用户登录,用户未登录和购物车合并)
在逛各大电商网站的时候,总会有将商品加入购物车,然后合并付款,这个大大的提高了用户的体验,某东更是任性,在未登录的情况下都可以将商品加入购物车,但是任性总是有代价的,后面我会说一下这个小bug。可能不算是个bug,但是体验上也有不爽的地方。还是谈谈购物车是如何实现的吧,购物车首先标识要唯一,因为每个账号要对应一个购物车,在登录状态下,我们可以直接将数据保存到数据库中,使用用户的id表示自己购买原创 2015-11-10 10:57:26 · 16788 阅读 · 7 评论 -
linux系统下安装多个MySql数据库并做主从配置(个人项目经验)
在网上搜索了很多资料,都没有看到像样的文档,思路不是很清晰,对第一次安装的朋友来说较为困难,经过长时间的安装尝试和查询网上零碎的知识点,终于成功的完成Linux系统下多MySql数据库安装和主从配置,现在分享给大家。前提:1、关闭Liunx系统的防火墙,如果忘了,你下面的测试连接必定会失败,切记,切记,切记。2、yum安装lrzsz和cmakeyum -y install lrzs原创 2016-01-20 11:34:11 · 4947 阅读 · 0 评论 -
linux下安装RabbitMQ消息机制
在Windows系统安装RabbitMQ是图形化界面比较简单,这里我将和大家聊聊怎么在linux系统中安装RabbitMQ。首先我们要清楚RabbitMQ底层是Erlang语言,因此在安装RabbitMQ之前我们需要先将Erlang语言环境安装,下面是本人安装的步骤。第一步:创建目录,上传RabbitMQ安装需要的软件。创建目录:[root@slave ~]# cd /usr/lo原创 2015-11-18 14:59:13 · 7126 阅读 · 0 评论 -
单个工程中Spring+Mybatis连接多个数据库的配置(个人分享版本)
上一篇博客说到同一个问题,经过和朋友的研究已经参考网上的资料,现在给出一份更简洁的配置。情景:现在单个工程中需要连接两个库,这两个库在同一个mysql中,两个库都需要进行读写。解决:第一步:将spring和mybatis整合,这个过程就不具体演示了,在这个过程中创建了直接使用的五个配置文件、两个类、一个标识。五个配置文件:jdbc.propertis(数据库连接信息)app...原创 2015-10-28 10:29:00 · 43770 阅读 · 8 评论