- 博客(27)
- 收藏
- 关注
原创 《重构》笔记
两个类中相同的字段,函数签名中相同的参数(s),总是绑在一起出现的数据项。拼成对象(如果删掉众多数据项中的一个,其他数据项失去意义,那么就应该这么做)参数列表中多个相同基本类型的参数,如(operatorID int64, empID int64, objID int64),为这些基本类型再定义(封装)一个类型:type ObjID int64,参数列表变成 (operatorID int64...
2020-03-23 19:53:16
215
原创 总结2019
coding能力实现需求的一般思路先思考整个逻辑,后将逻辑拆解,分层设计(view/service/持久层)层与层之间交互的api定义,不要着急去实现某一小块逻辑用简洁的代码将多个api串起来,此时思考每个api定义是否合理,包括:是否每个api做到了单一指责原则对需求进行想象中可能的扩展,扩展后单个api是否能复用,即可扩展性api签名是否合理,函数名表达「做了什么事情」,参数...
2020-01-10 18:50:15
171
原创 熔断器学习
熔断器的作用在分布式系统中,请求下游系统时,如果下游系统响应慢,或者直接hang住请求,可能会拖垮上游系统,产生雪崩效应。因此希望在下游系统不稳定或者不可用时,不调用下游系统,直接报错返回熔断器的设计熔断器的三种状态closed,正常情况,熔断器关闭,请求放行open,异常情况,熔断器打开,拒绝所有请求halfopen,由closed到open状态后,不能一直拒绝所有的调用,得有一个...
2019-12-01 22:48:04
476
原创 orm框架学习
orm框架做了什么?对原生的db操作进行封装,提供简单一致的接口,将db中的关系型数据转换成程序中的对象,实现一个orm框架需要做什么?最简单的思路:func bizObj get(params)func result set(bizObj)以get方法为例,入参通常是一些查询参数,而出参是业务对象,这里需要考虑的问题:怎么让使用者提供bizObj与数据库表的映射关系?怎么让使...
2019-11-30 17:47:36
368
原创 jvm读书笔记
类加载与链接:1.类型的唯一性通过类的全限定名和类的定义类加载器来标识。每个类加载器维护一个独立的命名空间,只有在同一命名空间中的类才能相互调用。一般的jvm中共有三个类加载器:启动类加载器 扩展类加载器 系统类加载器。 自定义类由系统类加载器加载,ArrayList由启动类加载器加载,假如在自定义类中初次使用ArrayList,此时系统类加载器的命名空间中并没有ArrayList,因此需要借...
2019-11-30 17:13:19
191
原创 raft协议学习记录
a leader cannot immediately conclude that an entry from a previous term is committed once it is stored on a majority of servers.在b阶段,S1下线,S5上线并被选为leader,同时写入term3/index2,此时S1和S2中的entry仍然是term2/ind...
2019-11-10 10:00:08
173
原创 golang闭包学习记录
func TestClosure() { i:=1 go func() { i++ }() time.Sleep(time.Second) //如果这里不sleep,上面的协程还没来得及修改共享变量,下面输出1, fmt.Print(i)//输出2,说明闭包是对同一变量的引用,而不是copy}type field struct { name string}func (...
2019-05-12 17:36:52
172
原创 二叉树的前/中/后序非递归遍历和快排的非递归版本
无论是哪种顺序的遍历,都属于深度优先的遍历,因此都需要用到stack,基本的思路是控制push和pop的顺序,在每次push时访问push的节点,或是在每次pop时访问pop的节点。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; ...
2019-03-03 11:59:54
217
原创 从字节码层面看try-catch-finally的实现机制
考虑以下方法可能的执行流程 public static int A() { try {//代码块1 return B(); }catch (Exception e){//代码块2 C(); } finally {//代码块3 System.out.pr...
2019-01-29 15:55:17
706
2
原创 ClassNotFoundException和NoClassDefFoundError的区别与联系
从命名上来看,一个是exception而另一个是error,这意味着出现ClassNotFoundException时是可以进行异常处理来挽救程序的,但出现NoClassDefFoundError对jvm来说是一个致命的,不可恢复的错误,通常会导致程序crash。NoClassDefFoundError在jdk中的定义:/** * Thrown if the Java Virtual ...
2019-01-28 15:56:56
472
原创 linux下nohup和&的区别与联系
nohup和&都可以在执行命令时使用,用法为:[nohup] command [&]command &代表让command在以后台进程的方式运行。通过ssh登录远程服务器后,会得到一个终端,这个终端提供了标准输入以及输出。例如执行pwd命令得到当前工作目录,pwd即是标准输入,而终端上显示的工作目录即是标准输出。像pwd或者ps -ef这种直接在终端上执行的命令,产...
2019-01-27 20:00:37
339
原创 leetcode 126 Word Ladder II
题目概述:Given two words (beginWord and endWord), and a dictionary's word list, find all shortest transformation sequence(s) from beginWord to endWord, such that:Only one letter can be changed at a ti...
2019-01-19 21:23:53
159
原创 Class类的getResource方法与getResourceAsStream方法
这两个方法,接收一个资源的路径参数name,返回一个代表资源的url或输入流。与linux中的文件定位类似,若name以“/”开头,此时将name视为绝对路径,后续classLoader会尝试以每一个classpath为根,以name为后续路径去寻找资源;若name不以“/”开头,则name为相对路径,相对于当前class对象对应类所在的包,在这个包路径的基础上以name为后续路径寻找资源。1...
2018-11-10 18:32:59
743
原创 newCachedThreadPool个人理解
先上源码 public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, ...
2018-10-19 21:31:28
8301
原创 阻塞队列源码阅读记录
本文结合生产者消费者模式对阻塞队列的主要方法实现进行说明。一、LinkedBlockingQueue该队列维护的临界区由链表实现,主要成员变量如下:capacity:临界区的上限count:原子整型,临界区的实际大小head:指向队首节点,控制出队过程tail:指向队尾节点,控制入队过程notEmpty:非空等待条件,从临界区中取资源时,若无资源则在该条件上等待...
2018-10-17 22:12:45
163
原创 AQS源码阅读记录
AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可同时执行,如Semaphore/CountDownLatch)使用acquire/release(模板)方法对外提供功能。使用一个双向队列和指向队列两端的head/tail指针来实现线程的有序排队,ps:head指针指向的第一个node为傀儡node,不包含真实...
2018-10-06 21:40:55
144
原创 try_files的个人理解
以下述配置文件为例: location ~ \.php$ { root html; try_files $uri $uri/ =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; ...
2018-07-18 21:42:10
8485
原创 读书体会
说说读书的体会。最近主要在看关于linux以及tomcat的几本书,都是一些进阶性的书籍,因此看的时候还是觉得蛮吃力的,很多章节都要来来回回的看好几遍,甚至结合其他章节才能看懂大致的意思。在看完每一章之后去回顾这一章的内容时,总会有“咦?这一章讲了什么来着?”这样的想法,然后再重新将这一章翻阅一遍,才能大致记得这一章的主要内容,不过这也持续不了太久,可能过了几天之后,一章里面能停留在我脑海里的就只...
2018-04-11 15:39:00
235
原创 leetcode 84 Largest Rectangle in Histogram (单调栈)
上题目题目大意为:给一个数组代表一个柱状图,数组中每一个元素依次代表柱状图中每个“柱”的高,求这个柱状图能包含的最大矩形面积。思考:最终矩形的高一定等于某个“柱”的高,宽为这个“柱”左右能延伸到的最大距离之和(直到遇见某个“柱”的高低于当前高)。暴力就是对于每一个“柱”,向左和向右延伸到极限得出宽,再乘以高,复杂度是n的平方。可以用单调栈(栈中的元素单调递增)对这个过程进行简化,栈...
2018-03-23 16:04:16
496
原创 Apriori算法以及MS-Apriori算法中生成频繁项目集步骤的个人理解
Apriori算法以及MS-Apriori算法均采用逐级搜索的方法来生成k阶频繁项目集,k阶频繁项目集仅由k-1阶频繁项目集两两合并而来。我要说明的是:为什么k-1阶频繁项目集两两合并的结果就一定是k阶频繁项目集的超集(算法后续步骤还会对这个超集进行剪枝) 首先对于Apriori算法,任意一个项集都满足向下封闭属性,若该项目是频繁项目集,那么他的任何子集都是频繁项目集;反之若该项...
2018-03-15 10:55:53
3745
原创 EasyUI Datagrid 客户端分页详解
在网上能找到的客户端分页demo基本都是同一段代码,但没有注释,下面是我根据自己的理解和调试分析写上代码以及注释,希望能帮助大家理解EasyUI Datagrid客户端分页的执行过程
2017-12-12 10:06:54
2014
原创 自定义HttpMessageConverter处理多个不同数组形式的JSON数据
如何在springmvc的HttpMessageConverter转换器中获取泛型参数的具体类型
2017-11-01 20:31:47
1423
原创 struts2:Infinite recursion detected
这个问题是struts2的拦截器循环调用自身的 intercept(ActionInvocation invocation)方法所导致的。struts.xml文件中部分配置如下:<!-- 定义自己的拦截器 --> <interceptors> <interceptor name="managerVerification" class="interceptor.
2017-09-01 22:11:50
642
原创 hibernate实体类设计体会
hibernate实体类设计体会以博客实体类和用户实体类为例,他们之间是多对多的关系,即一个博客可以被多个用户收藏,一个用户也可以收藏多个博客,现在考虑三个问题:1.双方是否持有对方集合的引用 2.当双方均持有对方集合的引用时,哪一方拥有对于联系的维护权限3.当双方均持有对方集合的引用时,如何设置级联关系首先第一个问题,双方是否持有对方的引用。我认为这取决于在传递数据(一方的pojo对象)时是
2017-08-01 17:18:42
459
原创 Hibernate注解之@ManyToMany
当两个类(a,b)使用@ManyToMany注解时,会产生一个中间表a_b,该中间表表示两个类的关联关系,此时有两种情况:只有一端(类)维护该关联关系,两端(类)均可维护该关联关系。现有一新闻类Label和一标签类News,其为多对多的关系,使用@ManyToMany注解情况一:只有一端(类)维护该关联关系若仅News端可维护该关联关系,则意为只能通过向News类对象的集合属性labels中添加La
2017-07-22 15:39:01
3812
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人