背景 关于如何避免写出慢SQL,我发现自己对这方面的认识比较浅薄,生产环境中,慢SQL一旦产生,其代价还是比较大的,就比如数据库宕机,这是我们一定要去避免发生的现象。所以,一定要结合数据库,结合业务数据量去学习如何避免慢SQL,而不浅浅地只拘泥在理论层面。 定量认识慢SQL 作为一个合格的程序员,我 Read More
背景 本篇将会讲一些文件读写的推荐使用姿势以及编码时的注意事项,便于新手更好地理解如何高效地进行大文件读写,比如利用好缓冲区避免出现OOM,或者及时地释放资源以保证资源被及时地关闭,避免资源泄露。 处理中文时读取到乱码 大家都知道,中文的编码和英文的编码使用的字符集是不一样的,字符集不匹配的时候读取 Read More
背景 大家都知道,使用对象的时候,由于对象的默认值为null, 如果没有及时判空就去调用对象的方法,可能会带来空指针异常的问题。本篇将会讲解空指针异常容易在哪些情况下出现,新手应该如何去避免无处不在的null值问题,又应该如何修复。主要举一些常见的例子来配合说明。 1、自动拆箱导致的空指针异常 首先 Read More
背景 本篇博文将会讲一讲Spring中使用@Transactional注解会出现的不生效问题。事务的生效与否,一般不是我们冒烟自测的范围,测试也不会去测,但是一旦上线后,事务出现不生效的情况,就可能引发较大的问题,甚至会带来损失。所以,使用好事务注解是非常重要的,尤其是注意哪些场景下会出现事务失效。 Read More
背景 我们都知道ThreadLocal实现了资源在线程内独享,线程之间隔离。 实际使用中,ThreadLocal适用于变量在线程间隔离,而在方法或类间共享的场景。比如用户信息,当用户信息需要在多个方法之间传递或者共享使用的时候,同时,每个Tomcat请求的用户信息是私有的。这时可使用ThreadLo Read More
背景 本博文主要是创建了一个新的SpringBoot项目,实现基本的增删改查,分页查询,带条件的分页查询功能。是方便初学者学习后端项目的一个比较清晰明了的实践代码,读者可根据博文,从自己动手创建一个新的SpringBoot项目,到使用PostMan测试基本请求,完完全全实践一遍,写出自己的代码,或者 Read More
背景 分布式事务,后端开发中比较常见啦。因为在面试的时候,总是有interviewers让我给他普及一下分布式事务,虽然我会的也不多呀但是还是浅浅说一说; 今天心血来潮,好好地总结一下分布式事务,希望每一位后端工程师都能彻底理解分布式事务。 什么是分布式事务? 答:既然是分布式,首先必然是分布式系统 Read More
背景 volatile关键字是并发编程中的一个比较重要的关键字。它能保证变量/对象在内存中的可见性,同时禁止指令重排序,避免了CPU或者编译器优化带来的可见性问题。 在并发编程中,volatile可以去修饰一个变量,或者是一个对象(比如单例模式中就使用了volatile去修饰单例对象) 举例说明 v Read More
背景 本文将讲解单例模式-双重检验锁的实现。 代码实现 public class DCLTest { private volatile static DCL instance; private DCLTest () {}; public static DCLTest getInstance() { Read More
背景 我们知道hashmap是一个线程不安全的数据结构,在多线程编程的时候,多个线程同时向hashmap中put元素的时候,会发生数据丢失。多线程put操作后,再get操作导致死循环。 多线程put非NULL元素后,get操作得到NULL值。 使用 为了保证并发安全,我们使用hashmap的时候,建 Read More
背景 面试时考了这道题,之前一直都会递归遍历,非递归遍历倒是从来没有实际理解过它的具体过程,包括使用什么数据结构,具体的过程是怎样的?满脑子都是二叉树的层序遍历, 但是这里后序遍历和层序遍历还不太一样。 在仔细梳理并讲出自己的思路的时候,还是觉得并非易事。那就来分析分析。 什么是二叉树的后序遍历? Read More
背景 这是一道面试题,可考察的点也不少。总结几个关键词去解决这个问题,1,文件拆分;2、排序算法;3、缓冲buffer性能优化。 啊,乍一看,这绝对不是一个初级程序员能够答出来,且能答得很好的问题,这个题目可以考察到我们的算法能力,性能优化经验。可万万不能马虎对待! 开始讲思路。第一步, 文件拆分 Read More
背景 这个问题主要考察了Linux命令的使用,find 命令和 grep命令,在linux系统中,这两个命令用的比较广泛,工作中常常可以用来查找到指定的日志内容。 今天我们就来学一下两个命令,然后回答下这个问题吧。 命令介绍 1、find命令 find常用来在Linux系统中查找文件或者目录,查找到 Read More
安装git客户端,创建账户,这段可以省略不看。 由于我之前已经安装好了Git,然后这里就不再叙述之前的相关创建账户的步骤了。直接记录一下如何在本地创建一个项目,并上传到github上面。 1、打开github官网,点击New Repository,新建一个仓库。填写项目信息,Create Repos Read More
###1、HTTP, TCP, UDP 的区别? 首先要讲一下HTTP和TCP的区别;然后将一下TCP和UDP的区别。 TCP和UDP的区别已经复习过了,然后重点了解一下HTTP和TCP的区别。 TCP和UDP的区别 TCP 是⾯向连接的、可靠的、基于字节流的传输层通信协议。UDP是面向报文的,无连 Read More
###代码实现 方法一:for循环 public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("ab"); list.add("abc"); Read More
代码: import java.io.File; public class FileShow { static class Test12 { public static void main(String[] args) { File f = new File("C:\\Users\\19821\\D Read More
代码 /** * 统计给定文件中给定字符串的出现次数 * @param filename 文件名 * @param word 字符串 * @return 字符串在文件中出现的次数 */ public static int countWordInFile(String filename, String Read More
###发一个红包,要让若干人来抢,需要满足哪些规则? 1、所有人抢到的金额等于总金额,不能超过,也不能少于。 2、每个人至少抢到大于0的金额; 3、保证每个人抢到金额的几率相等。比如A 抢到10元的几率是20,B,C抢到的金额为10的几率也是20。 本题有金额限制,每个人的金额至少是10,所以不满足 Read More
Ubantu18.0正确安装RabbitMQ 1、安装erlang 因为RabbitMQ需要erlang语言的支持,所以我们需要先安装erlang. sudo apt-get install erlang-nox 2、安装Rabbitmq 先更新源 sudo apt-get update 再安装ra Read More