发送邮件的JavaMail和Spring提供的MailSender,以及比较

发邮件,项目的必备功能之一,如果一个稍微模块化一点的公司,一般会单独出来一个项目专用来做公司的发送信息的功能,当然这个发送信息中不止包含发邮件,还会有短信、APP push等。这篇聊聊推送邮件。在以前的开发中,公司用Java mail的比较多,由自己来写邮件的组装和发送功能,但是Java mail使用操作比较繁杂,后来渐渐……

Java输入和输出流关闭的顺序和关闭的姿势的对比理解

Java的流操作在实际应用中使用的很多,但是流的关闭顺序到底有没有要求,关闭流的顺序和节点流与处理流有什么关系,输出流和输入流又有什么区别,然后就是关闭流可以通过哪几种方式。这篇文章将会和大家讨论一下。……。整个篇幅说了节点流和处理流的区别,然后根据输出流和输入流讨论流的关闭顺序问题,然后就是流不同的关闭姿势说明,最后比较流不同关闭姿势的优缺点。

Java并发编程:如何实现线程间通信的N种场景和对应的实现方式

涉及到一个线程等待多个线程执行到一定位置后再执行,就不能使用上面的简单锁,在JDK中提供了一个很好用的类,就是CountDownLatch,这个类有计数功能,当ABC三个线程执行到一定的位置,触发CountDownLatch中的计数减一方法,当CountDownLatch内的计数达到0后,就会触发当前等待的线程D,让D继续往后面执……

ConcurrentHashMap简单的实现思想理解

关于说ConcurrentHashMap的文章很多,本博客也有转载这样的文章,但是总体觉得都是过于偏重源码的说明。没有很明确的结构图来让我们从整体上理解源码的实现过程。毕竟人都是偏向于懒,博客中源码过于太多,理解起来困难,再加上这种源码分析的篇幅很长,因此能真正看完理解的确不多(个人理解)。所以这篇文章里面将不贴出源码,完全……

MySQL数据库系列(六):MySQL之索引数据结构分析

数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search)……

坑坑集结会系列一:mybatis中mapper别名问题和maven依赖问题

又到一期挖坑填坑的时候啦,前段时间在开发一个新的项目,项目的框架逃不过三大件:Spring+Mybatis+Spring Boot。现在Spring Boot可谓是很有热度,如果是新开的项目基本都会是这个框架结构,用Spring MVC的已经很少(如果你说你们自己还在用,反驳我的说法,那我只能喊你一声杠精大哥啦)。之所以介绍一下这个……

MySQL数据库系列(五):MySQL之SQL优化十大口诀了解一下

SQL优化,心中永远的痛,同事写的各种复杂SQL,各种坑,有时候想拿出来优化一下,但是总感觉力不从心,不知从哪里下手。……。全值匹配是最优,最左前缀原则要注意,乱在索引列上操作惹祸害,范围查询记得放后面,不等于使用要小心,空和非空要注意,模糊查询通配符勿乱放,字符串查询加引号,OR变UNION效率会更高,记得覆盖索引尽量用。

MySQL数据库系列(四):MySQL数据库的执行计划怎么看

在写执行计划之前需要先了解一下数据库有哪些索引。其中组合索引有一个特性就是最左前缀原则,组合索引的最左列被使用到才会让整个组合索引生效。比如一个索引idx_name_phone,在索引列中name在前面,phone在后,当单纯是使用phone来查询的时候,是不会走idx_name_phone索引的,只有在name被使用的时候,才会让整个索引起作用。

MySQL数据库系列(三):MySQL数据库的ACID事务特性和隔离性级别

事务的特性主要有四种,简称为ACID。分别如下:原子性(atomicity):一个事务内是一个最小的操作单元,在此单元里操作成功或者失败都是相同的,不会存在部分成功部分失败的问题。隔离性(isolation):多个事务之间是隔离开的,事务之间对数据的操作是不会互相影响的。但是对于数据库来说有不同的隔离级别,事务之间的影响也是不同的。

MySQL数据库系列(二):MySQL数据库的存储引擎

mysql存储引擎熟知的主要是myISAM、InnoDB。myISAM和InnoDB到底有什么区别呢,都常说如果项目上使用到事务就用InnoDB,如果对事务无要求就用myISAM,查询速度更快。除了这两个存储引擎还有那些呢,虽然不常用,但是还是要做个了解,万一遇到合适的场景,到时候就没有那么慌啦。这篇内容主在了解,不做详细原理解释。