- 博客(84)
- 资源 (4)
- 收藏
- 关注
原创 代码简洁之道总结
**第一章整洁代码**1、为什么要写整洁的代码?(为什么)因为糟糕复杂的代码,对系统的后续维护会造成很大的麻烦,甚至需要重构,使得生产力下降读代码与写代码的时间比例为10:1 ,读代码的时间明显比写代码时间长,所以写好整洁的代码也会提高后续开发的效率。复杂混乱的代码,会给后续开发者带来压力,没有精力进行维护和改造糟糕代码,甚至逼迫继续造成混乱,恶性循环2、什么才算整洁的代码?(是什么)1)整洁的代码只做好一件事,一个方法、一个类只做自己的事(单一职责原则?避免受到四周细节干扰)2)减少重复代
2021-10-27 20:10:46 1317
原创 单元测试、TDD、BDD
## 单元测试相关### TDD三定律(测试驱动开发)**1 、You are not allowed to write any production code unless it is to make a failing unit test pass.**除非为了使一个失败的unit test通过,否则不允许编写任何产品代码(必须先写测试用例)----**2 、You are not allowed to write any more of a unit test than is su
2021-09-03 18:30:32 613
原创 JDK1.8新特性之Optional类
前言:最近做了一个需求,其中从其他微服务中获取了一个含有多个且多层实体的对象。而我则需要获取这个复杂对象里面的各个字段,如果不做校验很可能会出现空指针。所以代码中出现了很多if else来判断非null情况,而且还容易漏掉其中一个,造成空指针异常。Optional类刚好能解决优雅地这类问题。Optional简介:A container object which may or may not...
2019-10-30 14:22:41 400
原创 [ElasticSearch]入门篇
ES是个什么东西?Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。实时分析的分布式搜索引擎。可以扩展到上百台服务器,处理P...
2019-07-15 19:43:26 385
原创 【Java集合框架】——ConcurrentHashMap源码分析(jdk1.8)
ConcurrentHashMap 和 HashMap 思路是差不多的,但是因为它支持并发操作,所以要复杂一些。整个 ConcurrentHashMap 由一个个 Segment 组成,Segment 代表”部分“或”一段“的意思,所以很多地方都会将其描述为分段锁。注意,行文中,我很多地方用了“槽”来代表一个 segment。简单理解就是,ConcurrentHashMap 是一个 Seg...
2019-05-30 14:50:32 184
原创 【Java集合框架】——HashMap源码分析
HashMap源码分析(jdk1.8)HashMap是一个数组+链表结构的存储结构。底层的数组作为哈希桶,通过计算存入数据的key值得哈希值将数据存放到各个哈希桶中,当出现哈希值相同的情况,会用链表进行存储,链表中每个节点都是一个元素。HashMap是线程不安全的。jdk1.8 中,改良了一些算法以及数据结构实现,当一个桶中链表长度大于8时会转化为红黑树。Entry类也改为Node类,区...
2019-05-30 14:34:39 242
原创 深入理解JVM学习笔记
Java虚拟机 - 幕布Java虚拟机一、Java内存区域与内存溢出异常(OOM)1.运行时区域1.1程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器.由于Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的.在任何一个时刻,一个处理器(多核处理器则是一个核心)都只会执行一条线程中的指令.所以为了线程切换之后还能恢复到正确执...
2019-01-05 15:41:02 266
原创 Leetcode题解中级篇之树和图(10)中序遍历二叉树
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/32/trees-and-graphs/85/题目描述:给定一个二叉树,返回它的中序遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进...
2018-12-28 15:20:50 177
原创 Leetcode题解中级篇之链表(9)相交链表
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/31/linked-list/84/题目描述:编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4...
2018-12-27 14:50:16 161
原创 Leetcode题解中级篇之数组和字符串(8)奇偶链表
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/31/linked-list/83/题目描述:奇偶链表给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法...
2018-12-26 18:34:47 186
原创 Leetcode题解中级篇之链表(7)两数相加
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/31/linked-list/82/题目描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的...
2018-12-26 18:26:18 160
原创 Semaphore 的介绍与实现生产者消费者模式案例
一、介绍 Semaphore是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore可以用来构建一些对象池,资源池之类的,比如数据库连接池,我们也可以创建计数为1的Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。它的用法如下: public...
2018-12-26 13:31:28 295
原创 【面试题】 模拟多线程售票系统
public class Tiket{ private int tiketNumber; public int getTiketNumber() { return tiketNumber; } public void setTiketNumber(int tiketNumber) { this.tiketNumber = tiketNumber; } public Ti...
2018-12-26 13:12:18 671
原创 Leetcode题解中级篇之数组和字符串(6)递增的三元子序列
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/80/题目描述:给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。数学表达式如下:如果存在这样的 i, j, k, 且满足 0 ≤ i < j <...
2018-12-22 16:40:40 204
原创 Leetcode题解中级篇之数组和字符串(5)最长回文子串
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/79/题目描述:给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" ...
2018-12-21 15:52:30 225
原创 Leetcode题解中级篇之数组和字符串(4)无重复字符的最长子串
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/78/题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc...
2018-12-21 14:47:07 191
原创 JVM常见面试题以及解答汇总
一. 内存模型以及分区,需要详细到每个区放什么。Java虚拟机在程序执行过程会把jvm的内存分为若干个不同的数据区域来管理,这些区域有自己的用途,以及创建和销毁时间。 jvm管理的内存区域包括以下几个区域: 栈区: 栈分为java虚拟机栈和本地方法栈重点是Java虚拟机栈,它是线程私有的,生命周期与线程相同。每个方法执行都会创建一个栈帧,用于存放局部变量表,操作栈,动态链接,方...
2018-12-14 17:20:02 795
转载 Mybatis常见面试题
Mybatis常见面试题#{}和${}的区别是什么?#{}和${}的区别是什么?在Mybatis中,有两种占位符#{}解析传递进来的参数数据${}对传递进来的参数原样拼接在SQL中#{}是预编译处理,${}是字符串替换。使用#{}可以有效的防止SQL注入,提高系统安全性。当实体类中的属性名和表中的字段名不一样 ,怎么办 ?当实体类中的属性名和表中的字段名不一样 ,怎么...
2018-12-14 13:05:45 259
转载 mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译(转)
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = &amp;amp;quot;ruhua&amp;amp;quot;;上述 sql 中,我们希望 name 后的参数 &amp;amp;quot;ruhua&amp;amp;
2018-12-14 12:50:49 232 1
原创 剑指offer-Java实现:题目6、旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路:这个思路很简单。我是想用双指针,让查找更快点,写着写着感觉很棒,结果挂了。没找出哪里错了,...
2018-12-07 19:46:41 184
原创 剑指offer-Java实现:题目5、利用两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 思路:栈的特点:先进后出 。 队列特点:先进先出。自己画了画图,看的比较秦楚,大概是每次进队列操作都进stack1栈,出队列时必须先把stack1弹栈到stack2中,这样刚好就是倒过来的顺序了。stack1 : 1 > 2 1 > 3 2...
2018-12-07 19:40:43 158
原创 剑指offer-Java实现:题目4、重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路:了解二叉树的前,中,后序遍历的规律,我们就可以知道,通过前 中,或者 后 中 两种都能得到二叉树。主要通过三个步骤:1.查看前(后)...
2018-12-07 19:29:32 141
原创 剑指offer-Java实现:题目3、替换空格
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。 思路:看到说要从尾到头,很容易想到栈这种数据结构。 代码:import java.util.ArrayList;import java.util.Stack;public class Solution { public ArrayList<Integer> pri...
2018-12-07 19:21:45 155
原创 剑指offer-Java实现:题目2、替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 思路:就替换空格啊,Java写很简单。 代码:public class Solution { public String replaceSpace(StringBuffer str) { ...
2018-12-07 19:19:29 154
原创 剑指offer-Java实现:题目1、二维数组中的查找
题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路:由于题目说从左到右,从上到下都是递增的。我一开始就想到用 对角线上的元素来和 目标元素比较。但是选的是右下角。有欠考虑了,因为右下角排除的元素是一个角落的范围。如果选择右...
2018-12-07 19:18:23 171
转载 缺页中断——LRU、OPT、FIFO算法
版权声明:本文为博主原创文章,转载请注明作者和出处。 https://blog.csdn.net/u011080472/article/details/51206332 1. 缺页中断 在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内...
2018-12-06 20:37:29 477
原创 Leetcode题解中级篇之数组和字符串(3)字谜分组
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/77/题目描述:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: ["eat", "tea", "tan", "ate", "n...
2018-12-05 19:34:49 166
原创 Leetcode题解中级篇之数组和字符串(2)矩阵置零
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/76/题目描述:给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入: [ [1,1,1], [1,0...
2018-12-05 19:06:39 157
原创 Leetcode题解中级篇之数组和字符串(1)三数之和
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/29/array-and-strings/75/题目描述:给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:...
2018-12-05 17:32:44 170
原创 [面试题]1000瓶毒药里面只有1瓶是有毒的,问需要多少只老鼠才能试出那瓶有毒。
题目:1000瓶毒药里面只有1瓶是有毒的,毒发时间为24个小时,问需要多少只老鼠才能在24小时后试出那瓶有毒。思路:这题试Bloom Fliter 算法。详情可以参考:https://blog.csdn.net/jiaomeng/article/details/1495500 这题和我之前看到的一道题有点像。题为, 有1000个苹果,分别装在10个...
2018-12-02 12:19:49 50342 27
原创 [面试题]100层楼丢玻璃球,一旦超过某层就会破,你只有两个球。
题目:有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??思路:最简单的,扔一个到51层 ,碎了,再试后面50层 ,没碎再试前面50层,总共50次。时间复杂度较高。是个烂方法。 有没有一种方法,能分段查找呢。一个球均匀分段的扔,比如 20层20层的扔,如果在4...
2018-12-01 17:33:22 25025 12
原创 MySQL 不能插入中文字符的编码问题。
在 centos 下安装的mysql5.7.24 并没有默认的配置文件模板。所以一开始字符编码问题并不能通过网上教程解决在通过查阅资料之后使用第一种方法得到解决。第一种方法。 使用命令查看数据库的字符编码: mysql> show variables like 'char%'; 通过观察可以发现 character_set_database value...
2018-12-01 10:14:00 192
原创 Centos 7 下安装MySQL 5.7(yum方式)
相信对于第一次接触Linux系统下安装MySQL的朋友来说,这个真的很麻烦。 我是试过用tar.gz的方式安装,按照别人的教程 总是会出现很多输入完指令报错的情况。所以一个步骤一个错误很复杂。 最后通过查找资料。发现一个用yum 方法。安装成功 而且很简单。步骤:1、卸载mariadb,否则安装mysql会出现冲突执行命令rpm -q...
2018-11-30 11:14:33 231
原创 Leetcode题解之其他(6)颠倒二进制位缺失数字
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/26/others/69/题目描述:给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例 2:输入: ...
2018-11-29 17:19:58 174
原创 Leetcode题解之其他(5)有效的括号
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/26/others/68/题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符...
2018-11-29 17:08:39 233
原创 Leetcode题解之其他(4)帕斯卡三角形
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/26/others/67/题目描述: 帕斯卡三角形给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5输出:[ [...
2018-11-29 17:01:24 205
原创 Leetcode题解之其他(3)颠倒二进制位
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/26/others/66/题目描述:颠倒二进制位颠倒给定的 32 位无符号整数的二进制位。示例:输入: 43261596输出: 964176192解释: 43261596 的二进制表示形式为 000000101001...
2018-11-28 15:38:15 154
原创 Leetcode题解之其他(2)汉明距离
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/26/others/65/题目描述: 汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:...
2018-11-28 14:27:34 243
原创 Leetcode题解之其他(1)位1的个数
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/26/others/64/题目描述:编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 :输入: 11输出: 3解释: 整数 11 的二进制表示为 0000000...
2018-11-28 14:18:38 143
原创 Leetcode题解之数学问题(4)罗马数字转整数
题目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/25/math/63/题目描述:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L...
2018-11-26 17:22:38 187 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人