自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 深入学习Java序列化

前言对于Java的序列化,一直只知道只需要实现Serializbale这个接口就可以了,具体内部实现一直不是很了解,正好这次在重复造RPC的轮子的时候涉及到序列化问题,就抽时间看了下 Java序列化的底层实现,这篇文章算是这次的学习小结吧。第一部分:WhatJava序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指把二进制码重新转换成Java对象的过程。那么为什么需要序...

2019-04-30 16:08:32 240

原创 详解SpringBoot——启动原理及自定义starter

一、引言SpringBoot的一大优势就是Starter,由于SpringBoot有很多开箱即用的Starter依赖,使得我们开发变得简单,我们不需要过多的关注框架的配置。在日常开发中,我们也会自定义一些Starter,特别是现在微服务框架,我们一个项目分成了多个单体项目,而这些单体项目中会引用公司的一些组件,这个时候我们定义Starter,可以使这些单体项目快速搭起,我们只需要关注业务开发...

2019-04-30 11:50:39 971

原创 对于MySQL你必须要了解的锁知识

一、前言MySQL 的锁按照范围可以分为全局锁、表锁、行锁,其中行锁是由数据库引擎实现的,并不是所有的引擎都提供行锁,MyISAM 就不支持行锁,所以文章介绍行锁会以InnoDB引擎为例来介绍行锁。二、全局锁MySQL 提供全局锁来对整个数据库实例加锁。语法:FLUSH TABLES WITH READ LOCK这条语句一般都是用来备份的,当执行这条语句后,数据库所有打开的表都会被...

2019-04-29 11:32:03 211

原创 阿里架构师手写Tomcat——Session源码解析

在 web 开发中,我们经常会用到 Session 来保存会话信息,包括用户信息、权限信息,等等。在这篇文章中,我们将分析 tomcat 容器是如何创建 session、销毁 session,又是如何对 HttpSessionListener 进行事件通知tomcat session 设计分析tomcat session 组件图如下所示,其中Context对应一个webapp应用,每个web...

2019-04-28 20:45:21 290

原创 吐血总结——90%程序员面试都用得上的索引优化手册

目录多关于索引,分为以下几点来讲解:一、索引的概述(什么是索引,索引的优缺点)二、索引的基本使用(创建索引)三、索引的基本原理(面试重点)四、索引的数据结构(B树,hash)五、创建索引的原则(重中之重,面试必问!敬请收藏!)六、百万级别或以上的数据如何删除一、索引的概述Ⅰ、什么是索引?索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数...

2019-04-27 21:54:03 242

原创 哪有什么中年危机,不过是把定目标当成了有计划

一、计划比总结更具有建设性个人以为,计划其实比总结更具有建设性。计划是主动的,总结是被动的。计划首先意味著你有目标,有了目标,才会有决心和动力。人们常常讲求方法与效率的重要性,固然不错,但在方法之前,是方向。“对于盲目航行的帆船,什么风都是逆风。”打个比方,以理财中的储蓄为例——很多人应该有过这样的体会:如果每个月给自己设定一个固定储蓄目标,每次领到工资的第一件事就是把目标金额先存好,一年...

2019-04-27 20:31:48 311

原创 JDK源码——利用模板方法看设计模式

前言:相信很多人都听过一个问题:把大象关进冰箱门,需要几步?第一,把冰箱门打开;第二,把大象放进去;第三,把冰箱门关上。我们可以看见,这个问题的答案回答的很有步骤。接下来我们介绍一种设计模式——模板方法模式,你会发现,它与这个问题的答案实际上有很多共同之处。一、定义定义一个算法骨架,允许子类为一个或多个步骤提供实现。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法的某些步骤。二...

2019-04-25 12:28:28 537

原创 面试中可能被问到的常用排序算法

排序算法排序算法是一种比较简单的算法,从我们一开始接触计算机编程开始接触的可能就是排序或者搜索一类的算法,但是因为排序在其他的一些算法中应用较多,所以为了提高性能已经研究了多种排序算法。目前区别排序算法主要还是以时间复杂度,空间复杂度,稳定性等来排序,接下来我们分别分析。稳定性算法区别一个排序算法是否是稳定算法只需看相同的关键字在排序完成后是否保持原来两者的前后关系即可,比如对于[1,2,3...

2019-04-24 17:18:44 241

原创 MySQL的可重复读级别能解决幻读吗

引言之前在深入了解数据库理论的时候,了解到事物的不同隔离级别可能存在的问题。为了更好的理解所以在MySQL数据库中测试复现这些问题。关于脏读和不可重复读在相应的隔离级别下都很容易的复现了。但是对于幻读,我发现在可重复读的隔离级别下没有出现,当时想到难道是MySQL对幻读做了什么处理?测试:创建一张测试用的表dept:CREATE TABLE `dept` ( `id` int(11) ...

2019-04-24 15:40:58 1350

原创 通过Spring Boot Webflux实现Reactor Kafka

在Apache Kafka简介中,我们研究了分布式流媒体平台Apache Kafka。这一次,我们将关注Reactor Kafka,这个库可以创建从Project Reactor到Kafka Topics的Reactive Streams,反之亦然。我们将使用两个小型示例应用程序,Paymentprocessor Gateway和PaymentValidator。这些应用程序的代码可以在这里找到...

2019-04-24 12:23:09 904

原创 源码泄露到底是裁员报复,还是程序员反抗 996?

“后院”都要失守了,就先别馋大碗宽面了——B 站,你可长点儿心吧!“你的源代码泄露了,还搁这儿吃面?”2019 年 4 月 22 日,B 站(bilibili 弹幕网)官方微博账号内一片风平浪静岁月静好,照常发着安利视频。蹭着吴亦凡的新歌热度,16:56 分的推送是一碗货真价实的“大碗宽面”,但评论里的画风却是清一色的跑题——集体喊话 B 站,“回家看看吧,你家后院被点炮了”!吃面路人一脸...

2019-04-23 21:49:28 256

原创 这样做源码肯定不能被泄露,但你会疯...

今天吃个瓜。昨天下午B站源码竟然被恶意开源,想必很多读者都已吃过。就不在赘述了。不少网友吐槽官方对项目代码安全方面管理不到位也是造成泄露的主要原因。今天就说说关于代码安全方面的事情,真的是企业不够重视项目代码安全或管理不到位吗?算上实习我也是入职过各类有代表性的公司,规模有大有小,性质有国企也有私企。他们对于代码安全方面的管理措施也各不相同。确实有不重视代码安全的企业,但一般也都是些创业型...

2019-04-23 21:10:18 213

原创 面试京东Java架构师,竟然被问这些题,学到了!

前言其实收到jd的面试邀请的时候,我真心有点小激动。因为在地理位置上,jd应该是最合适我也是最想去的。但是我在看到方向的时候其实心里有很多的问题,也做好了被拒的准备。面试过程及感受因为是开车去,所以到亦庄的时候第一个问题是找车位,但是京东周边的马路上是基本不可能找到的了,还看到一个司机因为倒车慢了一点,被另外的小车司机迅速停入,吵吵了半天。最后在一个角落找到一个停车场,需要预约码才能停,门口...

2019-04-23 15:27:38 578

原创 我来告诉你解决死锁的100种方法

死锁是多线程编程或者说是并发编程中的一个经典问题,也是我们在实际工作中很可能会碰到的问题。相信大部分读者对“死锁”这个词都是略有耳闻的,但从我对后端开发岗位的面试情况来看很多同学往往对死锁都还没有系统的了解。虽然“死锁”听起来很高深,但是实际上已经被研究得比较透彻,大部分的解决方法都非常成熟和清晰,所以大家完全不用担心这篇文章的难度。虽然本文是一篇介绍死锁及其解决方式的文章,但是对于多线程程序...

2019-04-22 17:03:32 1260

原创 详解Spring的AOP切面编程

一 、基本理解AOP,面向切面编程,作为Spring的核心思想之一,度娘上有太多的教程啊、解释啊,但博主还是要自己按照自己的思路和理解再来阐释一下。原因很简单,别人的思想终究是别人的,自己的理解才是自己的,尤其当用文字、代码来阐述一遍过后,理解层面上又似乎变得不一样了。博主就不概念化解释AOP了,这里只简单说下为啥要使用这样一种编程思想和相关的AOP技术。其实很简单,就是为了业务模块间的解耦,...

2019-04-22 15:19:43 264

原创 Java必备技能:IDEA一定要懂的32条快捷键

这些IntelliJ IDEA键盘快捷键可以让你专注于编写代码,让你的双手在键盘上起舞。1,搜索文件名↑ Shift 快速连续按两下2,显示便捷提示和快速修复⌘ Cmd + ⤶ Enter3,快速生成代码Control + ⤶ Enter4,选中方法,查看参数信息⌘ Cmd + P5,弹出当前打开的文件列表⌘ Cmd + E6,根据0到9之间的数字,打开各个相应的工具窗口...

2019-04-21 21:42:21 161

原创 大整数相乘“分治法”和“循环暴力法”

前言今天刷到一道很有趣的面试题,感觉很有意思,来分享给大家。题目描述有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。输入描述:空格分隔的两个字符串,代表输入的两个大整数输出描述:输入的乘积,用字符串表示示例1输入72106547548473106236 982161082972751393输出70820244829634538040...

2019-04-21 20:41:00 576

原创 redis源码阅读之集合对象

redis当中集合对象的底层实现为intset和hashtable实现,用hashtable实现时,存储具体值的是key,value统一用NULL。其实集合对象的实现和hash对象的实现还是非常类似的,都是尽可能用占用空间小的底层类型存储,如果实在存不下了,就得鸟枪换炮了老规矩,还是先说转换的条件,由于占地较小的实现为intset,这就导致发生转化的条件比zipmap->hashtable要...

2019-04-18 20:32:06 179

原创 什么是JPA?Java Persistence API简介

作为规范,Java Persistence API关注持久性,它将Java对象的创建过程和具体的创建形式解耦。并非所有Java对象都需要持久化,但大多数应用程序都会保留关键业务对象。JPA规范允许您定义应该保留哪些对象,以及如何在Java应用程序中保留这些对象。JPA本身不是一个工具或框架; 相反,它定义了一组可以由任何工具或框架实现的概念。虽然JPA的对象关系映射(ORM)模型最初基于Hibe...

2019-04-18 16:13:57 1680

原创 Java异常处理:给程序罩一层保险

人这一生,总会遇到一些不可预料的麻烦,这些麻烦可能会让我们遭受沉重的打击。为了减轻因此承受的负担,我们就会买保险。本着负责任的态度,我们程序员在写代码的时候,都非常的严谨。但程序在运行的时候,往往会出现一些令人意想不到的错误,导致那些不被期望的事件发生,最终,程序没有按照我们的预期正常地执行下去——异常发生了,是任程序自生自灭,还是将错误输出给用户?Java为此提供的解决方案是——异常处理机制...

2019-04-17 15:22:56 157

原创 Java工程师的职业生涯应该如何规划

很多人事程序员这个职业的人,在到了30岁以后就会有一大部分想要转行,为什么会出现这种情况呢?程序员无疑是个调薪行业,所有高薪行业都有围城现象,圈外人看高薪,圈内人看苦逼,而真正热爱的人,一定会走下去,直到牛气冲天,比如安全界的tomkeeper、黑哥都是医学界跨过来的大牛。另外一种原因,很多人是喜欢编程才干这一行的,但大多数人是为了糊口才来掺和一下的。混口饭吃和喜欢才去做是完全不同的,所能到达...

2019-04-17 14:34:49 1403

原创 史上最全的Java并发面试题(珍藏版)

多线程java中有几种方法可以实现一个线程?继承Thread类;实现Runnable接口;实现Callable接口通过FutureTask包装器来创建Thread线程;使用ExecutorService、Callable、Future实现有返回结果的多线程(也就是使用了ExecutorService来管理前面的三种方式)。如何停止一个正在运行的线程?使用退出标志,使线程正常退...

2019-04-16 16:51:41 391

原创 这才是高手!Java大牛腾飞指南

编者有言:每个大牛的诞生都是从菜鸟起步的,只是在成长的过程中,他们为自己设立了长期而鉴定的奋斗目标,梳理了清晰而受用的知识架构。用这种知识框架去按部就班地成长,每个人都有成为大牛的可能。本文就将展示一种知识体系的构建方法,希望能够对你有所帮助。面试的时候,我会问面试者,你日常如何构建自己的知识体系,如何让自己更高更快更强?多数工程师并没有深入地思考过这个问题,基本上是零敲碎打,随机性大,基...

2019-04-16 15:46:34 250

原创 宁撞金钟一下,不打破鼓三千,IT人要有志气,要进就进大的好的公司

最近我也在帮一些朋友面试,再结合自身的经验,发现了一个意料之外情理之中的事情:个别挣钱能力一般或规模比较小的公司,对候选人的要求普遍比一些大公司反而高,而且工作时间普遍会比一些好公司要长。比如一个税前15k的高级开发岗位,一些小公司面试起来不仅问的面比较多,而且会要求候选人尽可能多地掌握各种技能,生怕出了这些钱雇来一个不值当的程序员,还最好这个程序员值20k,而且即使应聘成功,在试用期内,一些...

2019-04-15 16:59:31 317

原创 作为面试官,我是如何甄别应聘者的包装程度

一、初选如何鉴别劣质简历培训机构除了提供技术培训,往往还提供简历编写指导、面试指导。很多潜移默化的东西,我们很难甄别。但培训机构包装的简历,存在千遍一律的特征。1、年龄较小却具备高级文凭年龄较小却具备高级文凭,这个或许不能作为一项标准,但是大部分的应聘者,均符合传统文凭的市场情况。个别技术爱好者可能通过自考获得文凭,这种情况需提供独有的技术亮点。2、年龄较大却几乎不具备技术经验年龄较大...

2019-04-15 15:58:14 714

原创 详解Java中的守护线程

线程分类守护线程(即daemon thread),是个服务线程,准确地来说就是服务其他的线程,这是它的作用——而其他的线程只有一种,那就是用户线程。所以java里线程分2种:用户线程:比如垃圾回收线程,就是最典型的守护线程守护线程:就是应用程序里的自定义线程用户线程举例public class UserTest { public static void main(String...

2019-04-14 20:42:03 159

原创 一文讲解Java泛型的本质(非类型擦除)

背景昨天,在逛论坛时遇到个这么个问题,上代码:public class GenericTest { //方法一 public static <T extends Comparable<T>> List<T> sort(List<T> list) { return Arrays.asList(list.toArra...

2019-04-13 12:59:21 152

原创 编程心智——二八定律对软件开发的影响

相信很多人都听说过二八定律,这是一个适用性非常广泛的定律。我发现二八定律同样适用于软件开发,并对其产生了十分深远的影响。这次我想聊聊二八定律是如何影响我们日常的开发工作的,希望通过这个话题来改变一下大家习以为常的开发思维。定义二八定律是19世纪末20世纪初意大利经济学家巴莱多发现的。他认为:在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次要的,因此又称二...

2019-04-12 15:19:50 520

原创 程序员怎么快速接手一个项目

可能不管新手老手有些程序员,接手一个项目之后都会多少有些迷惘。以下是本人总结出来的一点小心得,如果错误希望大家给我留言,一起讨论:最重要的事儿如果你总是看见代码多就发愁,看见代码脏乱差就诅咒埋怨,看见代码逻辑复杂就头疼,搞不清调用关系就放弃,那你可能永远也变不成代码的主人,只能一次又一次被代码蹂躏。所以,其实交接代码最重要的事儿,就是:不要被浩渺如烟并且陌生怪诞的代码吓得不敢动弹,现...

2019-04-11 21:36:28 4140 2

原创 你可能不知道,做一名合格的Java程序员,需要哪些必备技能?

对于一个Java开发来说,编程技能毋庸置疑是很重要的。但是,除了基本的编程开发能力,其他方面的能力也是体现一个程序员的能力的很重要因素。比如,问题排查能力、线上运维能力、项目管理能力、协调沟通能力等。本文,主要来简单介绍一下,作为一个合格的Java开发,除了自身技术成长之外,还有哪些方面可以提升。类开发技能第一类,并不是纯coding技能,但是也和开发相关,我称之为类开发技能。Lin...

2019-04-11 15:15:18 235

原创 什么样的项目经历会让面试官眼前一亮

图书管理系统、教务选课系统的主要技术是数据库操作技术,就是数据库的增删改查操作,在面试官看来并没有什么技术含量。这些系统的关键在于业务流程,而不是技术。如果这些系统是你“真正”参与的“真实”的兼职项目,那么面试官会对你比较感兴趣,因为参与这些项目首先锻炼了你的技术,虽然没啥技术含量,但是你起码有一些项目经验,真正懂得什么是信息系统、信息系统开发会涉及到哪些问题,对他们来说你是一个有项目经验的熟练...

2019-04-11 14:18:16 751

原创 静态初始化中不能放入繁重计算,否则会变慢!

在类初始化期间计算不可变数据结果,并将结果保存在static final字段中是一种非常常见的做法。实际上,这正是静态初始化器的设计目标。以下是在初始化时构建一些静态表的典型示例:public class StaticExample { static final long[] TABLE = new long[100_000_000]; static { T...

2019-04-10 16:31:23 216

原创 别再问什么是Java内存模型了,看这里!

内部原理JVM 中试图定义一种 JMM 来屏蔽各种硬件和操作系统的内存访问差异,以实现让 Java 程序在各种平台下都能达到一致的内存访问效果。JMM 的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量与 Java 编程中的变量有所区别,它包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私...

2019-04-09 21:31:44 146

原创 讲个大部分数据结构和算法教科书中都不会讲的问题

大部分数据结构和算法书籍中,在讲某种数据结构和算法的时候,都会拿整数、字符串这些基本数据类型,作为要处理的数据的类型。实际上,在真实的软件开发中,数据结构中存储的数据、算法要处理的数据,往往都不是简单的整数,而是”对象“。这里的”对象“很好理解,就是编程语言的中的”类与对象“中的对象。比如下面这几行Java代码,我们用红黑树来存储Order订单对象。// 红黑树来存储订单,key是订单ID,v...

2019-04-08 17:45:16 194

原创 豆瓣上9分以上的Java技术书籍——附知识整理

当我要学习某些技术时,第一时间就是去找相关的书籍。而豆瓣读书是我主要的参考依据,主要是它的评分基本比较靠谱,对于技术书籍,一般来说评分在8分以上就是不错的书籍了,而达到9分就可以列入"必读"系列了,所以我就打算总结一下豆瓣上评分9以上的Java技术书籍,可是经典著作太多了,难免有遗漏,欢迎补充!Java编程思想 (第4版)评分:9.1本书赢得了全球程序员的广泛赞誉,即使是最晦涩的概念,在...

2019-04-08 16:59:37 392

原创 Java 12 发布了,决定Java未来的三大主要项目!

Java 12 发布了,没有引起很大的讨论。对于 Java 这样一门成熟的语言来说,每一次更新似乎都无法满足庞大的 Java 开发群体与生态圈。再加上 Oracle 对 Java 耐人寻味的态度,Java 的未来会如何?Java 的变化速度从未如此之快——如今,该语言的新版本每六个月就会发布一次。而之所以能够实现如此重大的转变,自然离不开一系列专注于提高其性能与添加新功能的协作性项目的贡献...

2019-04-07 20:08:52 200

原创 在阿里干了5年招聘,这10条建议我必须分享给你!

前阵子,我和阿里的薪酬福利专家M同学聊了一下午,M同学做了9年薪酬,和我们吐槽了很多薪酬方面的现象,也道出了少有人关注的薪酬逻辑和常识。这一次,我又找了一位阿里技术岗位的招聘专家T同学,从他的视角中,我们来看一下金三银四的招聘旺季下,10条求职的黄金规律。可以说每一条都很有深度。1、HR自己对自己没信心很多时候,HR不要你,不是因为你水平的问题,也不是因为你专业技能的问题。而是HR自己对自...

2019-04-07 19:54:59 260

原创 浅析Java并发中的单例模式

一、单例模式简介单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例。在java代码中,通常new关键字创造出来的对象,对系统的开销一般都挺大的。所以在某些情况下,单例的实现也是应对系统优化的一种解决办法。二、单例模式的实现常见的单例有这几种实现饿汉式饱汉式双重校验...

2019-04-06 20:38:45 175

原创 SpringBoot中并发定时任务的实现、动态定时任务的实现(看这一篇就够了)

一、在JAVA开发领域,目前可以通过以下几种方式进行定时任务1、单机部署模式Timer:jdk中自带的一个定时调度类,可以简单的实现按某一频度进行任务执行。提供的功能比较单一,无法实现复杂的调度任务。ScheduledExecutorService:也是jdk自带的一个基于线程池设计的定时任务类。其每个调度任务都会分配到线程池中的一个线程执行,所以其任务是并发执行的,互不影响。Spri...

2019-04-05 22:10:51 657

原创 Java如何在运行时识别类型信息?

在日常的学习工作当中,有一些知识是我们在读书的时候就能够习得;但有一些知识不是的,需要在实践的时候才能得到真知——这或许就是王阳明提倡的“知行合一”。在Java中,并不是所有的类型信息都能在编译阶段明确,有一些类型信息需要在运行时才能确定,这种机制被称为RTTI,英文全称为Run-Time Type Identification,即运行时类型识别,有没有一点“知行合一”的味道?运行时类型识别主要...

2019-04-03 17:59:56 180

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除