- 博客(222)
- 资源 (1)
- 收藏
- 关注

原创 【Java高级开发工程师】近一个月的面试总结
时隔两年,再一次的面临离职找工作,这一次换工作有些许的不舍,也有些许的无奈。个人所在的技术团队不错,两年时间成长了很多,也很不舍这个团队。但是,由于公司的某些原因和对于自身未来发展的综合考虑,又不得不得离去,去寻找更合适的地方成长和发展。相比于两年前,现在找工作没有那么的着急,也没有那么的迫切,也没有特别想去的公司,反正去大厂互联网公司基本都是加班加点的。也许,这是工作三年的我即将面临的一个坎吧。
2017-06-22 19:52:18
33081
33

原创 几种Java序列化方式的实现
0、前言本文主要对几种常见Java序列化方式进行实现。包括Java原生以流的方法进行的序列化、Json序列化、FastJson序列化、Protobuff序列化。1、Java原生序列化Java原生序列化方法即通过Java原生流(InputStream和OutputStream之间的转化)的方式进行转化。需要注意的是JavaBean实体类必须实现Serializable接口,否则无法序列化。
2017-03-04 11:01:46
27256

原创 【读书体会】《精进》:如何成为一个很厉害的人
preface 最近读了采铜所著的《精进》这本书,有所感触。书中比较全面地阐述了如何让自己成为一个很厉害的人,我比较认同作者大多数的观点。他主要从若干不同方面进行分析,来阐述观点。个人觉得,在当前浮躁的社会中,年轻人如何对职业和生活进行理性的认知和规划是很重要,有待深入思考。chapter1 人人都想成功,在我个人看来,成功最基本的条件是需要时间投入。就比如你想
2016-08-28 21:27:36
7621
2

原创 Guava Futures异步回调机制源码解析
1、前言 在前两篇文章中简单阐述了Java Future 和Guava ListenableFuture及其相关的应用。我们发现Guava ListenableFuture提供了比Java Future更加强大的功能,而在Google Guava并发包中,某些情况下,Futures这个类起到了不可或缺的作用,而ListenableFuture实现非阻塞的原理是其提供了回调机制
2016-06-25 13:59:35
13110
1

原创 设计模式09_观察者模式
1、定义 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。(摘自Head First中文版51页)2、说明 在通常情况下,软件系统会包含各种对象,就像大海孕育着形色各异的动植物一样。在浩瀚的海洋中,各种动植物彼此依赖和约束,形成一个个生物链。某一种生物的行为状态变化可能会造成其它生物作出相应行动。同样,在
2016-06-13 22:42:24
2868

原创 设计模式08_适配器模式
1、定义 适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本不兼容的类可以合作无间。(摘自Head First中文版243页)2、说明 通常情况下的适配器模式有两种形式:对象适配器和类适配器。类的适配器模式采用继承实现,而对象适配器采用对象组合方式实现。 类适配器使用继承的方式(静态方式),这样就使得
2016-06-02 22:37:08
7671

原创 设计模式07_代理模式
1、定义 代理模式为另一个对象提供替身或占位符以控制对这个对象的访问。使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。(摘自Head First 中文版第460页)2、说明 代理模式中,代理类(proxy class)对它的客户隐藏了对象的具体信息。因此,在使用代理模式
2016-05-31 23:04:49
7892

原创 设计模式06_装饰者模式
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/515315191、定义 动态将职责添加到对象身上。若要扩展功能,装饰者模式提供了比继承更加灵活的替代方案。(摘自Head First 中文版第91页)2、说明 通常情况下,在使用继承设计子类的行为,是在编译时静态决定的,所有的
2016-05-29 16:19:19
4604

原创 基于AsyncRestTemplate异步HTTP请求的一种轻量级技术实现
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/51428562Ⅰ、前言 在上一篇博客中讲述ListenableFuture通过异步回调机制来实现请求的非阻塞。通常情况下,客户端获取数据并不会只发送一次http请求,可能会有多个http请求。这样,使用上一篇博客中的方法,就会产生大量的冗余代码
2016-05-16 21:50:52
30913
2

原创 从Java future 到 Guava ListenableFuture实现异步调用
本文是在学习中的总结,欢迎转载但请注明出处:前言 随着移动互联网的蓬勃发展,手机App层出不穷,其业务也随之变得错综复杂。针对于开发人员来说,可能之前的一个业务只需要调取一次第三方接口以获取数据,而如今随着需求的增加,该业务需调取多个不同的第三方接口。通常,我们处理方法是让代码同步顺序的去调取这些接口。显然,调取接口数量的增加必然会造成响应时间的增加,势必会对系统性能造成一定影响。
2016-04-24 09:11:14
28693
2

原创 2016年的学习计划
最近几个月感觉好忙,忙的都没时间写博客。我想,也许说忙是一种借口,是的,的确是一种借口,说到底还是自己偷懒,不愿意动手。虽说技术博客应该讨论和分享一些和技术相关的话题,但是偶尔的一两次碎碎念可能带来别一番的意境吧。离开之前的传统软件公司并加入到新的互联网公司,差不多将近半年时间了,期间学习到了很多新的知识和技能,收获很多,感慨也很多。了解和学习了之前从未接触过的技术,包括springmvc、mem
2016-01-11 22:35:08
1214

原创 近一个月的面试总结
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/46753275前言 打算换个工作,近一个月面试了不少的公司,下面将一些面试经验和思考分享给大家。另外校招也快要开始了,为在校的学生提供一些经验供参考,希望都能找到满意的工作。 刚开始面试的几家公司,就是备受各种打击、就是一顿狂问,结果答上来的问题没几个,开始给自己的信心造成了一定的影响,后来经过调整后,又恢复到了信心满满的状态。一方面是工
2015-07-04 08:41:26
24983
23

原创 优化代码的重要性
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/45131085 工作将近一年了,从事软件开发也有三年多了,也写过不少的代码,但整体上来看,代码质量很差。一方面是缺乏编程方面的经验,写出的代码不能够考虑全面地情形;另一方面可能是需求设计的频繁性变动,导致代码的结构的不稳定性变动。这些都直接或间接地影响代码的质量,而代码质量的好坏将会直接影响到产品的性能和用户体验。这些都会无形中影响用户
2015-04-19 17:55:25
10090

原创 重构笔记——移除中间人
本文是在学习中的总结,欢迎转载但请注明出处:http://write.blog.youkuaiyun.com/postedit/44022341 在上一篇文章中介绍了“隐藏委托关系”。本文将介绍“移除中间人”这种重构手法。 下面让我们来学习这种重构手法吧。开门见山 发现:某个类做了过多的简单委托动作。 解决:让客户直接调用受托类。动机
2015-03-02 19:48:16
4686

原创 Leetcode_172_Factorial Trailing Zeroes
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/42417535Given an integer n, return the number of trailing zeroes in n!.Note: Your solution should be in logarithmic
2015-01-05 22:37:14
2689

原创 重构笔记——以查询取代临时变量
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/42167015 在上一篇文章中介绍了“ 内联临时变量“。本文将介绍“以查询取代临时变量”这种重构手法。 下面让我们来学习这种重构手法吧。开门见山 发现:你的程序以一个临时变量保存
2015-01-04 07:40:30
5343

原创 重构笔记——内联临时变量
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/42167015 在上一篇文章中介绍了“ 内联函数“。本文将介绍“内联临时变量”这种重构手法。 下面让我们一起来学习该重构手法把。(PS:虽然某些重构手法看起很简单,但是和其它重构手法结合起来使用,会产生异曲同工的
2014-12-31 08:15:34
5080
1

原创 重构笔记——内联函数
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/42261333 在上一篇文章中介绍了“提炼函数“。本文将介绍“内联函数”这种重构手法。 下面让我们一起来学习该重构手法把。
2014-12-30 08:10:04
6303
7

原创 重构笔记——提炼函数
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/42214393 在前面的三篇文章中介绍了重构入门篇、代码的坏味道(上)、代码的坏味道(下)。本文将正式开启重构之旅。从本文开始在后续的文章中会陆续介绍92种重构手法,每一种重构手法都会对应于一种代码坏味道。在介绍的过程中,每一种重构手法也将对应一篇文章,可能有的重构手法比较简短,但是为了便于整理还是单独将其列为一篇。(PS:不管怎样,我都会坚持把这些
2014-12-28 15:45:05
5943
1

原创 重构笔记——构筑测试体系
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/42167015 作为一名程序员,不知你是否在开发过程中也很少甚至不写测试程序,可能大多数人觉得这很正常,其实从个人角度来看也很正常,因为毕竟有测试人员专门进行测试的嘛!但是,如果能够认真观察程序员把最多时间耗在哪里,你就会发现,编写代码其实只占非常小的一部分。有些时间用来决定下一步干什么,另一些时间花在设计上,最多的时间则是用来调试。我敢肯定每一位读者
2014-12-26 08:06:51
4822

原创 JAVA中IO流总结
本文是在学习中的总结,欢迎转载但请注明出处:http://write.blog.youkuaiyun.com/postedit/42119261 我想你对JAVA的IO流有所了解,平时使用的也比较的多,但是对于其具体分类和继承体系可能知道的并不多,可能也很少去看相关的API文档,找出其中的关系和各自的应用情形。本文简单对常用的IO流进行分类整理,并简单举例说明其应用。希望本文对你有所帮助。
2014-12-24 08:12:18
5882
5

原创 重构笔记——代码的坏味道(下)
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/42083495 在重构笔记——代码的坏味道(上)中介绍了22种坏味道中的11种,本文将介绍其余的11种坏味道。之所以将其分为两篇文章介绍,是因为一篇文章介绍22种方法显得篇幅太长,担心读者难以坚持看完。(PS:在对这些"代码的坏味道“了解和熟悉后,我们就要开始有针对性地进行重构了,但是在进行重构之前,我们似乎还缺少点什么!对了,我们还缺少测试环境!在开发的
2014-12-22 18:59:32
5253

原创 重构笔记——代码的坏味道(上)
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/42041757 在重构入门篇中,简单地介绍了重构的定义、为何重构、何时重构等。我想对于重构是如何运作的,你已经有了较好的理解了。但是对于代码中的坏味道,你可能知道的并不多。坏味道可能是无形中产生的,也可能是开发人员偷懒造成的,还可能是其它某些因素导致的。不管怎么样,代码中的坏味道对程序没有半点好处,它会促使程序腐烂,甚至变质。对于开发人员,真的是很有必要
2014-12-20 11:51:53
14016
11

转载 谁能给你机会,让你如愿以偿
别总是抱怨自己怀才不遇,工资太少,先去想想怎么提高自己的能力,怎样让老板赏识吧。 近段时间,已经不止听到一个人对我抱怨:“公司给我这么点钱,我就干这么点事,凭什么多干,他又不给我涨工资。”我忍不住小声嘀咕:如果我是老板,我也不会重用你。反观,也难怪这些人做了一两年仍然原地踏步,先别说涨工资,哪怕你就是再干上十年,估计老板也不会给你涨,说不定哪天碰到经济不景气,就把你裁了,不是没可能的。
2014-12-20 09:29:08
3933
4

原创 重构笔记——入门篇
程序员经常会遇到晦涩难懂的代码,尤其是他人写的代码,可能是同事离职后转交给你维护的,也可能是项目遗留下来的。不管怎么样,当你被迫从一个2000行代码的类或一个500行代码的方法中去寻找并解决bug,我想大多数人都会头疼,对于没有一点注释的代码,甚至想死的心都有。这时候我们少不了会在心中默默诅咒写出这样代码的人。我想不管对于你还是我自己,当我们在开发的过程中,经常会抱以只要程序能正常运行就行,而不管代码是否整洁的心态。这样的做法其实是在坑自己,不要等到后续代码维护时再后悔当初没有把代码写好,那时再对代码进行修
2014-12-17 20:06:08
6155
2

原创 从"按层次输出二叉树"到"求解二叉树深度"的总结
本文是在学习中的总结,欢迎转载但请注明出处:http://write.blog.youkuaiyun.com/postedit/41964669最近在刷LettCode上的算法题,发现好多题目的解题思路大体是一致的,甚至会出现一解对多题的情形,可能一方面原因是我刷的都是简单题,另一方面原因可能是网站有意来提高我们的信心和联想能力。比如有求解二叉树最大深度和求解二叉树最小深度的题目,也有判断两颗树是否完全一致和判断两个树是否轴对称的题目,还有按层次从树根往下输出每层元素和按层次从下往树根输出每层元素的题目等。昨天
2014-12-16 19:31:16
5354

原创 Leetcode_112_Path Sum
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/41910495Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all the values along the path equals the given sum.思路:(1)题意为给定一个(每个节点带有数值)二叉
2014-12-13 15:52:53
2536

转载 20-30岁,我拿十年做什么 (转)
一:这10年,一定要有自己的方向 1、没有方向感,是最要命的 2、不管起点有多低,都要坦然接受 3、围绕自己的兴趣爱好选择职业 4、做自己最擅长的事 5、从最容易实现的目标开始做起 二:这10年,要做哪些准备? 1、要过语言关 2、要有一样看家本领 3、掌握工作的全部 4、把知识变成能力
2014-11-01 21:38:41
3730

原创 瞬间学会数据结构常用排序算法
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/40625351瞬间学会数据结构常用排序算法。本文是用JAVA语言实现数据结构中7种基本排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序。希望对您有所帮助。
2014-10-30 20:05:48
3553
原创 ZooKeeper系列—服务端启动源码分析
从zkServer.sh中发现ZK启动类为:org.apache.zookeeper.server.quorum.QuorumPeerMain,下面分析QuorumPeerMain启动代码。 /** zookeeper服务端启动类 * To start the replicated server specify the configuration file name on * the command line. * @param args path to th
2021-03-07 15:34:04
469
原创 史上最全面redis整理(初版)
1、redis数据结构Redis作为Key-Value型的内存数据库, 其Value有多种类型:String:类型是二进制安全,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。实战场景:缓存: 经典使用场景,把常用信息,字符串,图片或者视频等信息放到redis中,redis作为缓存层,mysql做持久化层,降低mysql的读写压力。计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源。session:
2020-10-24 22:30:18
1674
2
原创 python脚本上传文件
#!/usr/bin/python# -*- coding: utf-8 -*-import requestsurl = "https://www.youkuaiyun.com/"request_files = { 'params': (None, '{"fileName":"demo.txt", "fileType":"txt"}'), 'token': (None, 'xxx'), 'username': (None, 'xxx'), 'password': (None
2020-10-23 10:20:03
635
原创 Map+双向链表实现LRU算法
map+双向链表实现,其中双向链表头结点的后继节点依次存储最近使用的缓存数据,尾节点的前驱节点为最久未被使用的数据;当通过key查询缓存在map中,则将对应节点移动至头结点的后面;key不在缓存中时,新建一个节点,并移动至头结点后面。实现代码如下所示:import java.util.Map;import java.util.concurrent.ConcurrentHashMap;/** * Map+双向链表实现LRU * * @param <V> */publ..
2020-06-03 14:35:25
965
原创 ReentrantLock—Condition源码解读
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/1050312591、前言Condition实现关键:等待队列。等待队列是一个FIFO的队列,队列中每个节点包含一个线程引用,该线程就是在Conditon对象上等待的线程。一个Con...
2020-03-22 18:04:42
598
原创 线程池(ThreadPoolExecutor)工作原理解读
几种常见线程池:newScheduledThreadPool创建一个定长线程池,支持定时及周期性任务执行,可以作一个定时器使用。newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过需要的线程数量,可灵活回收空闲线程,若无可回收,则新建线程。newSingleThreadExecutor创建一个单线程的线程池,它只会用唯一的工作线程来执行任务,...
2020-03-15 18:18:03
632
原创 线程安全锁代码实现
手动实现了一个线程安全的锁,希望对你有所帮助。import sun.misc.Unsafe;import java.util.concurrent.ConcurrentLinkedQueue;import java.util.concurrent.locks.LockSupport;public class MyLock { private static final Un...
2020-03-14 18:39:54
341
原创 读写锁(ReentrantReadWriteLock)源码解读
读写锁允许同一时刻被多个读线程访问,但是在写线程访问时,所有的读线程和其他的写线程都会被阻塞。ReentrantReadWriteLock特性:公平性选择:支持非公平性(默认)和公平的锁获取方式,吞吐量还是非公平优于公平;重入性:支持重入,读锁获取后能再次获取,写锁获取之后能够再次获取写锁,同时也能够获取读锁;锁降级:遵循获取写锁,获取读锁再释放写锁的次序,写锁能够降级成为读锁...
2020-03-14 18:22:37
374
原创 设计模式12_责任链模式
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.youkuaiyun.com/pistolove/article/details/1044547741、定义 责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起...
2020-02-23 11:52:56
265
决策的艺术思维导图精华整理
2020-10-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人