- 博客(151)
- 收藏
- 关注
原创 为什么 MySQL 不推荐默认值为 null ?
PrefaceNull is a special constraint of columns. The columns in table will be added null constrain if you do not define the column with “not null” key words explicitly when creating the table.Many programmers like to define columns by default because of
2021-01-06 17:00:42
194
原创 ElasticSearch 面试 4 连炮,你顶得住么?
面试题 es 写入数据的工作原理是什么啊? es 查询数据的工作原理是什么啊? 底层的 lucene 介绍一下呗? 倒排索引了解吗? 面试问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是......对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,...
2021-01-06 16:59:30
195
原创 ElasticSearch 面试 4 连炮,你顶得住么?
面试题 es 写入数据的工作原理是什么啊? es 查询数据的工作原理是什么啊? 底层的 lucene 介绍一下呗? 倒排索引了解吗? 面试问这个,其实面试官就是要看看你了解不了解 es 的一些基本原理,因为用 es 无非就是写入数据,搜索数据。你要是不明白你发起一个写入和搜索请求的时候,es 在干什么,那你真的是......对 es 基本就是个黑盒,你还能干啥?你唯一能干的就是用 es 的 api 读写数据了。要是出点什么问题,你啥都不知道,...
2021-01-06 16:50:31
171
原创 Google 开源的 Guava 工具库,太强大了~
目前Google Guava在实际应用中非常广泛,本篇博客将以博主对Guava使用的认识以及在项目中的经验来给大家分享!正如标题所言,学习使用Google Guava可以让你快乐编程,写出优雅的JAVA代码!那么,看下面的代码示例,guava让你不必在操心这些:Joiner是连接器,Splitter是分割器,通常我们会把它们定义为static final,利用on生成对象后在应用到String进行处理,这是可以复用的。要知道apache commons StringUtils提供的都是stati
2021-01-06 16:48:41
183
原创 Eclipse 4.18 稳定版发布!
部分更新亮点:控制台输出支持自动换行(该设置默认关闭)引入新的"System"主题,能够和任何 OS 和 OS 主题进行良好集成更新 macOS 版本的浅色主题,与新系统的设计风格保持一致旧新...
2020-12-30 11:05:33
99
原创 MyBatis 的执行流程,写得太好了!
MyBatis可能很多人都一直在用,但是MyBatis的SQL执行流程可能并不是所有人都清楚了,那么既然进来了,通读本文你将收获如下: 1、Mapper接口和映射文件是如何进行绑定的 2、MyBatis中SQL语句的执行流程 3、自定义MyBatis中的参数设置处理器typeHandler 4、自定义MyBatis中结果集处理器typeHandler PS:本文基于MyBatis3.5.5版本源码。概要在MyBatis中,利用编程式进行数据查询,主要就是下面几
2020-12-30 11:04:32
148
原创 ElasticSearch 面试 4 连炮,你顶得住么?
面试题 es 写入数据的工作原理是什么啊? es 查询数据的工作原理是什么啊? 底层的 lucene 介绍一下呗? 倒排索引了解吗? 面试题剖析es 写数据过程 客户端选择一个 node 发送请求过去,这个 node 就是coordinating node(协调节点)。 coordinating node对 document 进行路由,将请求转发给对应的 node(有 primary shard)。 实际的 node 上的pr...
2020-12-30 11:02:48
90
原创 2021 年春招面试攻略来了。。。
大家好,其实我一直不知道我在大家心目中的定位是什么,但我内心其实是把自己定义为一个『工具人』的。可能是因为我自己本身就是程序员,所以更能理解程序员的不易吧。所以,我尽量不写水文,只分享干货。就是希望大家看了能够有所收获,可以找到一份满意的工作,拿到一个不错的薪水,然后可以推荐推荐我。好了言归正传,抖音年底扩招的消息,相信大家应该都听说了吧,我真心觉得这是一个不错的机会,所以希望大家年前能够冲一冲,为自己拿下一个不错的岗位。所以今天,就来分享一点技术面的干货。...
2020-12-25 11:32:40
426
原创 MyBatis 的 4 个妙用,别再踩坑了!
1、在Mybatis mapping.xml映射配置文件中使用大于>号小于号<由于Mybatis的映射文件遵循xml文件的格式,所以不能使用像大于号或者小于号这样的xml文件特殊字符,需要使用转义字符代替。< < 小于号 > > 大于号 & & 和 ' ’ 单引号 " “ 双引号 可以使用:SELECT*FROMtestWHERE1=1ANDs...
2020-12-25 11:31:25
359
原创 面试一家小公司,被问了 1 个小时并发编程。。全程已记录!
最近有读者投简历去一家小公司去面试的时候,和面试官聊了一个小时的并发编程,整个过程已全记录下来。面试的时候小心翼翼,如履薄冰,生怕说错一句话,就错失机会,担心,面试紧张、卡壳。不知道大家有没有这个问题?面试官:你知道CAS吗,能跟我讲讲吗?我:CAS(Compare And Swap),比较并交换。整个AQS同步组件,Atomic原子类操作等等都是基于CAS实现的,甚至ConcurrentHashMap在JDK1.8版本中,也调整为CAS+synchronized。可以说,CAS是整个.
2020-12-25 11:28:36
287
1
原创 又9名程序员被抓!网友:里面有我前同事~~~
两年时间这家软件公司开发了50余款APP获利500万元结果却是警察找上门9名程序员被抓……近日,平安时报平台发布了这样一起“程序员犯罪”事件。下面跟播妞一起探究一下事件的缘由,无论何时引以为戒。事件要从9月下旬说起,一名叫小何(化名)的朋友到派出所报警,表示自己网上炒股被人骗走了近20万元。在案件侦办过程中,民警发现小何手机中下载的一款赌博软件也是诈骗软件。于是,他们顺藤摸瓜找到了制作和维护该软件的公司——位于深圳的某文化科技有限公司,而成立该公司的犯罪...
2020-12-23 19:23:27
1586
2
原创 Kafka 居然还会丢消息?
Kafka存在丢消息的问题,消息丢失会发生在Broker,Producer和Consumer三种。BrokerBroker丢失消息是由于Kafka本身的原因造成的,kafka为了得到更高的性能和吞吐量,将数据异步批量的存储在磁盘中。消息的刷盘过程,为了提高性能,减少刷盘次数,kafka采用了批量刷盘的做法。即,按照一定的消息量,和时间间隔进行刷盘。这种机制也是由于linux操作系统决定的。将数据存储到linux操作系统种,会先存储到页缓存(Page cache)中,按照时间或者其他条件进行刷..
2020-12-23 14:05:45
108
原创 Java 程序员必须掌握的 4 大开源框架!
对于开发来说,我们在工作中普遍都会用到各个开源框架,比如最基础的 Spring,使开发网络编程变得特别简单的 Netty 框架,还有成为目前微服务框架首选的 Spring Cloud 等。在多个框架之上,我们仅需使用几行代码,即可实现业务需要的复杂功能,大大减少了工作量。也正因如此,不少人只会用框架,看不懂源码,不了解其底层机制与实现原理,成了一名只会搬运源码库的开发。说白了,就是真正牛逼的技术不属于你。可了解框架中的很多知识和代码,对解决开发中的类似问题是极其有帮助的。因为它们是经过时..
2020-12-23 14:04:57
1339
原创 使用消息队列(MQ)的 10 个理由!
过去几年中,我们一直在使用、构建和宣传消息队列,我们认为它们是很令人敬畏的,这也不是什么秘密。我们相信对任何架构或应用来说,消息队列都是一个至关重要的组件,下面是十个理由:1、解耦在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息队列在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束。2、冗余有时在处理数据的时候处理过程会失败。除非数据被持久化,否则将永远丢失。消息队列把
2020-12-21 15:06:54
79
原创 Thread, Runable, Callable 还傻傻分不清?
一、Thread 与 Runnable1、创建线程的两种方法在java中你怎么创建线程?相信你很快能够想到继承Thread类和实现Runnable接口这两种方式。没错,java提供了这两种方式来创建新的线程。网上也有各种文章介绍这两种方式创建线程的区别,但是我们这里要讲的是这两种方式的关联。先分别看看这两种方式的代码:1、继承Thread类,重写run方法publicclassMyThreadextendsThread{@Override...
2020-12-21 15:06:09
160
原创 Kafka 居然还会丢消息?
Kafka存在丢消息的问题,消息丢失会发生在Broker,Producer和Consumer三种。BrokerBroker丢失消息是由于Kafka本身的原因造成的,kafka为了得到更高的性能和吞吐量,将数据异步批量的存储在磁盘中。消息的刷盘过程,为了提高性能,减少刷盘次数,kafka采用了批量刷盘的做法。即,按照一定的消息量,和时间间隔进行刷盘。这种机制也是由于linux操作系统决定的。将数据存储到linux操作系统种,会先存储到页缓存(Page cache)中,按照时间或者其他条件进行刷..
2020-12-21 15:04:45
50
原创 Java 实现滑动时间窗口限流算法,你见过吗?
在网上搜滑动时间窗口限流算法,大多都太复杂了,本人实现了个简单的,先上代码:packagecn.dijia478.util;importjava.time.LocalTime;importjava.util.LinkedList;importjava.util.List;importjava.util.Map;importjava.util.Random;importjava.util.concurrent.ConcurrentHashMap;/***滑动时间窗口...
2020-12-18 11:10:32
113
原创 Google 鼓励的 13 条代码审查标准,建议收藏!
以下为译文:在本文中,我们将简要介绍13条代码审查标准,希望能够通过这些标准极大地帮助改善软件的质量,同时让开发人员保持心情愉悦。代码审查是开发过程中的一个环节,顾名思义,代码审查需要一位或多位开发人员审查另一位开发人员(即代码的作者)编写的代码,以确保: 代码没有任何错误,没有bug,也没有问题; 代码符合质量与样式指南的要求和标准; 代码完成了所有预期功能; 合并代码后,代码库仍然能够正常运行,且达到更好的状态。 这就是为什么代码审查是软件开发的重要环节的
2020-12-18 10:56:23
107
1
原创 Java 生成随机数的 5 种方式,你知道几种?
1. Math.random() 静态方法产生的随机数是 0 - 1 之间的一个double,即0 <= random <= 1。使用:for(inti=0;i<10;i++){System.out.println(Math.random());}结果:0.3598613895606426 0.2666778145365811 0.25090731064243355 0.011064998061666276 0.60068622817...
2020-12-18 10:55:41
134
原创 注意了!System.currentTimeMillis() 存在性能问题...
System.currentTimeMillis()是极其常用的基础Java API,广泛地用来获取时间戳或测量代码执行时长等,在我们的印象中应该快如闪电。但实际上在并发调用或者特别频繁调用它的情况下(比如一个业务繁忙的接口,或者吞吐量大的需要取得时间戳的流式程序),其性能表现会令人大跌眼镜。直接看下面的Demo:publicclassCurrentTimeMillisPerfDemo{privatestaticfinalintCOUNT=100;pub...
2020-12-17 14:37:04
316
原创 有了 Martian-cloud,不再需要注册中心?
项目简介Martian-cloud是Martian的官方分布式组件,基于传染机制,不再需要注册中心 完全丢弃了注册中心,且不依赖任何注册中心,采用传染机制实现服务的发现与治理 服务间通话采用rest风格 对Martian的侵入非常小 先解释下什么是传染机制1.常规的分布式采用的是【生产者->注册中心->消费者】模型,生产者将接口给注册中心,消费者从注册中心发现其他的服务,实现调用2.传染机制就是丢弃注册中心,可以把接口看做病毒,服务看做是人,...
2020-12-17 14:34:15
80
原创 使用 Redis 实现一个轻量级的搜索引擎,牛逼啊!
场景大家如果是做后端开发的,想必都实现过列表查询的接口,当然有的查询条件很简单,一条 SQL 就搞定了,但有的查询条件极其复杂,再加上库表中设计的各种不合理,导致查询接口特别难写,然后加班什么的就不用说了(不知各位有没有这种感受呢~)。下面以一个例子开始,这是某购物网站的搜索条件,如果让你实现这样的一个搜索接口,你会如何实现?(当然你说借助搜索引擎,像Elasticsearch之类的,你完全可以实现。但我这里想说的是,如果要你自己实现呢?)从上图中可以看出,搜索总共分为6大类,每大类中又分.
2020-12-17 14:33:35
98
原创 Object o = new Object() 占多少字节?
小小面试一下前言蜜语最近马师傅火的不要不要的,虽然没有抢到耗子尾汁的商标注册权,但是必须得蹭一波马师傅的热度,下面就是闪电五连鞭的教学环节,你准备好了吗!在正式内容开始前先甩两篇关于类加载机制和内存布局的文章,因为今天的内容多少与这两篇文章有直接的联系,对这方面还比较薄弱的朋友可以先看看,关注公众号Java技术栈搜索阅读JVM,在公众号回复:JVM46,还可以获取一份 46 页的 JVM 高清教程。今天本文的内容就针对刚刚模拟面试两个问题1.对象的创建过程2.对象的内存布局对
2020-12-16 12:51:03
172
原创 关于 TCP/IP,必知必会的十个问题!
本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。一、TCP/IP模型TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议。基于TCP/IP的参考模型将协议分成四个层次,它们分别是链路层、网络层、传输层和应用层。下图表示TCP/IP模型与OSI模型各层的对照关系。TCP/IP协议族按照层次由上到下,.
2020-12-16 12:02:11
432
原创 一个故事告诉你什么是消息队列,很形象…
案例有一天,产品跑来说:“我们要做一个用户注册功能,需要在用户注册成功后给用户发一封成功邮件。”小明(攻城狮):“好,需求很明确了。” 不就提供一个注册接口,保存用户信息,同时发起邮件调用,待邮件发送成功后,返回用户操作成功。没一会功夫,代码就写完了。验证功能没问题后,就发布上线了。线上正常运行了一段时间,产品匆匆地跑来说:“你做的功能不行啊,运营反馈注册操作响应太慢,已经有好多用户流失了。”小明听得一身冷汗,赶紧回去改。他发现,原先的以单线程同步阻塞的方式进行邮件发送,确实存在问题。这次,
2020-12-16 12:01:14
77
原创 Java 8 中的 Map 骚操作,学习下!
Java 8 最大的特性无异于更多地面向函数,比如引入了lambda等,可以更好地进行函数式编程。前段时间无意间发现了map.merge()方法,感觉还是很好用的,此文简单做一些相关介绍。首先我们先看一个例子。merge()怎么用?假设我们有这么一段业务逻辑,我有一个学生成绩对象的列表,对象包含学生姓名、科目、科目分数三个属性,要求求得每个学生的总成绩。加入列表如下:privateList<StudentScore>buildATestList(){...
2020-12-15 11:20:00
66
原创 52 条 SQL 语句性能优化策略,建议收藏!
本文会提到52条SQL语句性能优化策略。1、对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引。2、应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应该使用NOT NULL,或者使用一个特殊的值,如0,-1作为默认值。3、应尽量避免在where子句中使用!=或<>操作符,MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以...
2020-12-15 11:18:29
69
原创 我的天!!线上千万级大表排序,如何优化?
前言今天我们聊一聊Mysql大表查询优化,前段时间应急群有客服反馈,会员管理功能无法按到店时间、到店次数、消费金额 进行排序。经过排查发现是Sql执行效率低,并且索引效率低下。应急问题商户反馈会员管理功能无法按到店时间、到店次数、消费金额 进行排序,一直转圈圈或转完无变化,商户要以此数据来做活动,比较着急,请尽快处理,谢谢。线上数据量merchant_member_info7000W条数据。member_info3000W。“不要问我为什么不分表,改动太大,无能为力。..
2020-12-15 11:17:30
156
原创 Spring MVC 的执行过程,面试必问了!
Spring AOP 原理简单说说 AOP 的设计: 每个 Bean 都会被 JDK 或者 Cglib 代理,这取决于是否有接口。 每个 Bean 会有多个“方法拦截器”。注意:拦截器分为两层,外层由 Spring 内核控制流程,内层拦截器是用户设置,也就是 AOP。 当代理方法被调用时,先经过外层拦截器,外层拦截器根据方法的各种信息判断该方法应该执行哪些“内层拦截器”。内层拦截器的设计就是职责连的设计。 是不是很简单??事实上,我之前已经写过一个简单的例子,看完之后更
2020-12-14 10:07:50
55
原创 为什么都不用 switch 而使用 if/ else 来做条件判断?
请用5秒钟的时间查看下面的代码是否存在bug。推荐阅读:switch case 支持的数据类型。OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了,而最为关键的问题是,这个Bug系统不会报错!缺点一 语法正确,逻辑错误这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器
2020-12-14 10:06:18
119
原创 Java 反射,这篇写的很透彻!
一、反射机制是什么?二、反射的具体使用 2.1 获取对象的包名以及类名 2.2 获取Class对象 2.3 getInstance()获取指定类型的实例化对象 2.4 通过构造函数对象实例化对象 2.5 获取类继承的接口 2.6 获取父类相关信息 2.7 获取当前类的公有属性和私有属性以及更新 2.8 获取以及调用类的公有/私有方法 三、反射的优缺点 3.1
2020-12-14 10:02:36
133
原创 腾讯牛逼!终于开源了自家的 Tencent JDK——Kona!!
是的,继阿里2019/03开源基于 OpenJDK 的长期支持版本Alibaba Dragonwell之后,腾讯也发布了自家的开源免费的 JDK 版本——Tencent Kona,必须替小马哥宣传一波。看了下 Github 腾讯开源版 JDK 的发布记录:最早是在 2019/11/04 这天发布的Tencent Konav8.0.0 版本,没错,最近栈长村里通网了,最近才知道腾讯自家版 JDK 这个东东,不办法,我是村网通,我为我自己带盐。Tencent Kona 8Ten...
2020-12-11 10:48:01
167
原创 Java 生成随机数的 5 种方式,你知道几种?
1. Math.random() 静态方法产生的随机数是 0 - 1 之间的一个double,即0 <= random <= 1。使用:for(inti=0;i<10;i++){System.out.println(Math.random());}结果:0.3598613895606426 0.2666778145365811 0.25090731064243355 0.011064998061666276 0.60068622817...
2020-12-11 10:45:12
360
原创 26 张图带你彻底搞懂 volatile 关键字!
引子小艾吃饭路上碰上小牛,忙问:你昨天面大厂面的咋样了?听说他们最喜欢问多线程相关知识。小牛说:对啊,第一个问题我就讲了20分钟,直接把面试官讲服了。小艾忙问:什么问题能讲这么久?是不是问你情感经历了?小牛说:...问的volatile关键字。小艾说:volatile关键词的作用一般有如下两个: 可见性:当一个线程修改了由volatile关键字修饰的变量的值时,其它线程能够立即得知这个修改。 有序性:禁止编译器关于操作volatile关键词修饰的变量的指令重排序。 你
2020-12-11 10:44:22
100
原创 一个核心系统 3 万多行代码的重构之旅!
经典著作《重构》这本书中有这么一段话:一开始,我所做的重构都停留在细枝末节上。随着代码趋向简洁,我发现自己可以看到一些设计层面的东西了,这些是我以前理解不到的,如果没有重构,我达不到这种高度。重构,着实是一件让程序员兴奋的事情。今年年初,我们团队完成了一个复杂项目的重构工作,它属于广告系统最核心的引擎部分,大概有 300 多个文件,3 万多行代码。从技术方案设计到最终全量上线仅仅花了 1 个月左右的时间,而且没有产生事故。这应该是我 8 年程序生涯中,经历过的最大型的同时最成功的一次重构
2020-12-10 14:48:47
90
原创 图文并茂:AQS 是怎么运行的?
前言如果你想深入研究Java并发的话,那么AQS一定是绕不开的一块知识点,Java并发包很多的同步工具类底层都是基于AQS来实现的,比如我们工作中经常用的Lock工具ReentrantLock、栅栏CountDownLatch、信号量Semaphore等,而且关于AQS的知识点也是面试中经常考察的内容,所以,无论是为了更好的使用还是为了应付面试,深入学习AQS都很有必要。CAS学习AQS之前,我们有必要了解一个知识点,就是AQS底层中大量使用的CAS,关于CAS,大家应该都不陌生,这里不多复述。
2020-12-10 14:47:59
103
原创 2020 最烂密码 TOP 200 大曝光,霸榜的仍旧是 123456!
整理 | 王晓曼出品 | 程序人生(ID:coder _life)11月19日,网络安全公司 NordPass 在对近2.757亿个密码进行审查后,统计公布了2020年最常用密码TOP200名单。其中,“123456”位居榜首,有近250万人使用,而在去年,该密码排名第二,据NordPass统计,该密码已经被破解了超过2350万次。从榜单来看,前十名密码依次是:123456,123456789,picture1,password,12345678,111111,123123,12345...
2020-12-10 14:45:13
111
原创 基于SpringBoot开发一个Restful服务,实现增删改查功能
# 前言在去年的时候,在各种渠道中略微的了解了SpringBoot,在开发web项目的时候是如何的方便、快捷。但是当时并没有认真的去学习下,毕竟感觉自己在Struts和SpringMVC都用得不太熟练。不过在看了很多关于SpringBoot的介绍之后,并没有想象中的那么难,于是开始准备学习SpringBoot。在闲暇之余的时候,看了下SpringBoot实战以及一些大神关于SpringBoot的博客之后,开始写起了我的第一个SpringBoot的项目。在能够对SpringBoot进行一些简单的开发.
2020-12-09 08:43:30
144
原创 JVM GC耗时频频升高,这次排查完想说:还有谁?
# 背景多个业务线的应用出现LongGC告警最近一段时间,经常收到CAT报出来的Long GC告警(配置为大于3秒的为Longgc)。# 知识回顾1 JVM堆内存划分 新生代(Young Generation) 新生代内被划分为三个区:Eden,from survivor,to survivor。大多数对象在新生代被创建。Minor GC针对的是新生代的垃圾回收。 老年代(Old Generation) 在新生代中经历了几次M...
2020-12-09 08:40:20
83
原创 查询提升 200 倍,ClickHouse 你值得拥有!
ClickHouse 是 Yandex(俄罗斯最大的搜索引擎)开源的一个用于实时数据分析的基于列存储的数据库,其处理数据的速度比传统方法快 100-1000 倍。ClickHouse 的性能超过了目前市场上可比的面向列的 DBMS,每秒钟每台服务器每秒处理数亿至十亿多行和数十千兆字节的数据。ClickHouse 是什么?ClickHouse 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。我们首先理清一些基础概念: OLTP:是传统的关系型数据库,主要操作增删改查,强调
2020-12-08 09:21:32
80
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人