程序猿洞晓
项目中手机、姓名、身份证信息等在日志和响应数据中脱敏操作 项目中手机、姓名、身份证信息等在日志和响应数据中脱敏操作
项目日志打印请求的入参和出参,用来跟踪数据信息,方便根据日志信息排查问题,在涉及到用户敏感信息的时候,为了安全的考虑,不能直接将这些信息直接输出到日志文件中,需要做脱敏操作。如果这个脱敏操作放在项目的业务代码中,只要出现需要脱敏的信息就进行一次脱敏操作,这样会有很多脱敏的代码冗余;如果将脱敏的逻辑代码提出来,在需要脱敏的位置……
2018-12-12
nginx基础学习(一):linux环境下nginx的安装和配置文件的初步认识 nginx基础学习(一):linux环境下nginx的安装和配置文件的初步认识
nginx目前在市场上使用是非常广泛的,作为一个开发人员,可以不会nginx的高级使用,但是基本的使用场景以及日常问题排查技能还是要有的。nginx使用的方向主要有三个,分别是路由功能、负载均衡功能以及静态资源服务功能。路由功能主要是用来将不同请求分发到不用的服务上,负载均衡是将请求分发到一个服务的集群中的不同虚拟机上,这两种……
2018-12-09
ThreadLocal遇到线程池出现数据问题和解决方案 ThreadLocal遇到线程池出现数据问题和解决方案
ThreadLocal开发中常用,通过ThreadLocal操作数据实现线程之间的隔离,保证线程之间不会因为操作同一数据导致数据安全问题。但是这种隔离是有适用范围的,也就是说在某些特定的情况下还是会出现数据安全问题的。这种特定情况下就是使用到线程池,并且在ThreadLocal使用前后没有做数据清理,就会导致安全问题,下面来看看出现的情况和具体……
2018-12-02
Spring Data JPA使用必备(二):Spring Data JPA方法命名规则实现SQL自动生成 Spring Data JPA使用必备(二):Spring Data JPA方法命名规则实现SQL自动生成
Spring data JPA是一个好东西,但是对于很多习惯于写SQL,直接怼数据库的人来说,这个真的用不习惯,还被一致认为是一个不易于程序员发展的技术。因为JPA提供了标准的封装,在操作数据库的时候,不需要写SQL,完全通过操作对象即可完成。久而久之,SQL就会被慢慢的遗忘,生疏,等以后面试的时候,也许这就是上升的一个短板。现在……
面向切面思想实现项目全局异常处理(简单切面+Spring提供的封装) 面向切面思想实现项目全局异常处理(简单切面+Spring提供的封装)
以前写项目的时候所谓,异常直接在各个层里面捕捉处理后向外返回错误信息,但是实际上有些运行时异常很容易被忽略,这样就会导致这些异常出现后会直接返回给调用方。当时的解决方案就是在Controller层的每个方法加try-catch块,捕捉所有的异常并处理后返回给调用方,但是这样处理起来比较麻烦,因为每个方法上都要加……
2018-11-02
Spring Data JPA使用必备(一):Spring Data JPA整合Spring以及简单的使用 Spring Data JPA使用必备(一):Spring Data JPA整合Spring以及简单的使用
最近公司部分新开的项目需要使用Spring data JPA技术,作为一个从来没有用过JPA的小白来说,需要重新的学习。N年前简单的看过JPA,这么多年没用过,完全忘记了有木有。接下来的系列文章就一起来整理一下。使用了@Entity注解后会默认映射到数据库的表,按照驼峰规则,如类名是CustomerBaseInfo,那么就会对应到表名为……
发送邮件的JavaMail和Spring提供的MailSender,以及比较 发送邮件的JavaMail和Spring提供的MailSender,以及比较
发邮件,项目的必备功能之一,如果一个稍微模块化一点的公司,一般会单独出来一个项目专用来做公司的发送信息的功能,当然这个发送信息中不止包含发邮件,还会有短信、APP push等。这篇聊聊推送邮件。在以前的开发中,公司用Java mail的比较多,由自己来写邮件的组装和发送功能,但是Java mail使用操作比较繁杂,后来渐渐……
2018-10-28
Java输入和输出流关闭的顺序和关闭的姿势对比理解 Java输入和输出流关闭的顺序和关闭的姿势对比理解
Java的流操作在实际应用中使用的很多,但是流的关闭顺序到底有没有要求,关闭流的顺序和节点流与处理流有什么关系,输出流和输入流又有什么区别,然后就是关闭流可以通过哪几种方式。这篇文章将会和大家讨论一下。……。整个篇幅说了节点流和处理流的区别,然后根据输出流和输入流讨论流的关闭顺序问题,然后就是流不同的关闭姿势说明,最后比较流不同关闭姿势的优缺点。
2018-10-25
Java并发编程:如何实现线程间通信的N种场景和对应的实现方式 Java并发编程:如何实现线程间通信的N种场景和对应的实现方式
正常情况下,每个子线程完成各自的任务就可以结束了。不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了。 1. 文前说明1.1 本文涉及到的知识点 thread.join() object.wait() obje
2018-10-21
ConcurrentHashMap简单的实现思想理解 ConcurrentHashMap简单的实现思想理解
关于说ConcurrentHashMap的文章很多,本博客也有转载这样的文章,但是总体觉得都是过于偏重源码的说明。没有很明确的结构图来让我们从整体上理解源码的实现过程。毕竟人都是偏向于懒,博客中源码过于太多,理解起来困难,再加上这种源码分析的篇幅很长,因此能真正看完理解的确不多(个人理解)。所以这篇文章里面将不贴出源码,完全……
2018-10-18
MySQL数据库系列(六):MySQL之索引数据结构分析 MySQL数据库系列(六):MySQL之索引数据结构分析
数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search)……
2018-10-16
Mybatis中mapper别名问题和maven依赖问题 Mybatis中mapper别名问题和maven依赖问题
又到一期挖坑填坑的时候啦,前段时间在开发一个新的项目,项目的框架逃不过三大件:Spring+Mybatis+Spring Boot。现在Spring Boot可谓是很有热度,如果是新开的项目基本都会是这个框架结构,用Spring MVC的已经很少(如果你说你们自己还在用,反驳我的说法,那我只能喊你一声杠精大哥啦)。之所以介绍一下这个……
2018-10-13
10 / 15