自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CSDN文章已停止维护,后续文章会在 https://blog.hufeifei.cn 持续更新

CSDN文章已停止维护,后续文章会在 https://blog.hufeifei.cn 持续更新

原创 阿里,优秀开发速来,投至luofei.hff@alibaba-inc.com

坐标:杭州-余杭-西溪园区 职位:Java高级开发工程师 岗位要求: Java基础扎实,熟悉常见的数据结构 对Spring、MyBatis、SpringBoot有深入了解 对MySQL有深入了解,对索引、事务、锁有深入了解 对线程池等并发编程技术有深入了解 有Dubbo、Rocket...

2020-05-21 22:10:21 51 0

原创 垃圾回收算法与JVM内存管理

因为之前公司有人分享过G1回收器的内容,很多人听的云里雾里(包括我)。甚至有人问学GC有什么用,对写代码有帮助吗。我想这个问题不可置否。 《深入理解Java虚拟机》一书中有这么一句话:Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人却想出来。 这...

2018-12-06 17:47:08 394 3

原创 ThreadPoolExecutor最佳实践--如何选择队列

前一篇文章《如何选择线程数》讲了如何决定线程池中线程个数,这篇文章讨论“如何选择工作队列”。 再次强调一下,ThreadPoolExecutor最核心的四点: 1、当有任务提交的时候,会创建核心线程去执行任务(即使有核心线程空闲); 2、当核心线程数达到corePoolSize时,后续提交的...

2018-08-12 20:55:45 3295 0

原创 ThreadPoolExecutor最佳实践--如何选择线程数

去年的一篇《ThreadPoolExecutor详解》大致讲了ThreadPoolExecutor内部的代码实现。 总结一下,主要有以下四点: 当有任务提交的时候,会创建核心线程去执行任务; 当核心线程数达到corePoolSize时,后续提交的都会进BlockingQueue中排队; 当B...

2018-07-29 15:47:05 13305 4

原创 ssl证书申请以及nginx证书的配置

准备知识 SSL/TLS:这两个分别是Secure Socket Layer(安全套接字层),Transport Layer Security(传输层安全)的缩写。TLS是SSL的继承者,如果不是搞安全的专业人员,完全可以认为他们是一样的东西。 关于这两者的差异可以参考https://...

2020-06-03 11:11:07 4756 0

原创 从notify和metaq初窥消息队列的前世今生
原力计划

上一家公司并没有用消息队列中间件,大学里对ActiveMQ有所了解但并未深入研究,RocketMQ、Kafka也一直囿于听闻。不过在原来的项目中经常会用Redis的list实现一个分布式的阻塞队列。在短信服务调用中,会将服务的同步调用改为异步任务存入队列表批量调度以提高吞吐量,并降低大促期间大批量...

2020-04-27 21:50:46 84 0

原创 分库分表的一些思考
原力计划

分库分表这个技术在之前一家公司其实也有接触。上一家公司在业务上按照用户水平分库的,所以避免了很多业务上的问题,但也只是基于Spring的AbstractRoutingDataSource,根据userId做了简单的路由。之前也在网上听说过sharding-jdbc等中间件,也仅限于了解。所以结合我...

2020-04-27 21:47:55 256 0

原创 K-D树、K-D-B树、B-K-D树

K-D树在维基百科上定义是将K维空间中的点进行分割的数据结构,D是dimensional(维度)的缩写,K-D树是BSP(Binary Space Partitioning)的一种。 维基百科的解释很正式(看的迷迷糊糊)。简单的说,K-D树就是二分查找树在K维空间的泛化(更迷糊了????)。 1、...

2020-03-07 22:36:13 358 0

原创 Spring-IOC整体设计与源码分析

最近读完《Spring技术内幕》一书,虽然此书评价貌似不高,但边看书边读源码,感觉还是有点收获,至少为阅读Spring源码提供了思路。然后这篇文章就记录一下这几天看Spring IOC这块的源码以及整体思路。 1、 BeanFactory与ApplicationContext 在Spring的IO...

2020-03-07 18:15:49 102 0

原创 SpringDataRedis踩坑记录

这几天做的功能涉及到Redis缓存,踩了不少坑,这里记录下来。 1、SpringBoot自动配置的RedisTemplate 在SpringBoot中可以在``properties配置文件中配置[spring.redis.*`相关属性](https://docs.spring.io/spring-...

2019-02-21 01:15:56 430 0

原创 ssh连接服务被拒的问题

昨天在整理服务器的文件时,删了一些没用的空文件夹。并把自己新电脑的公钥配在服务器上。然后尝试ssh登录服务器的时候出问题了: ssh_exchange_identification: Connection closed by remote host 我擦,登不上去了。我刚开始以为是我公钥配错了,...

2019-01-20 13:35:17 1206 0

原创 一枚Javer对Ruby的吐槽

公司收购了个项目,技术都很老,Web用的Ruby on Rails,前端还在用jQuery,后台数据同步用Java(用的技术也都很老)。自己以前没有接触过Ruby,只是听有些朋友大学里玩过这玩意儿,所以对我来说Ruby就是一门全新的语言。我个人是非常抵触学一门新语言的,Java都还没吃透就并行学...

2019-01-13 14:23:57 406 0

原创 ForkJoinPool入门篇

《线程池ThreadPoolExecutor详解》和《任务调度线程池ScheduledThreadPoolExecutor》两篇文章将ThreadPoolExecutor和ScheduledThreadPoolExecutor两个核心线程池已经详细介绍过了,它们整体的工作结构如下图所示。 这...

2018-09-16 14:57:33 8128 2

原创 使用POI解析Excel

Excel作为一种常用的数据存储格式,在很多项目中都会有相应的导入导出的功能。这篇文章会介绍如何使用Java操作Excel,以及如何解决大文件读写时内存溢出的问题。 1、OpenXML标准 Word、Excel、PPT是Office办公套件中最常用的三个组件。早期的Office套件大都使用...

2018-09-08 19:07:35 23673 1

原创 使用Certbot申请Let'sEncrypt免费证书

半年前在自己的网站上配了个SSL证书,当时是用ZeroSSL进行证书申请的。但是证书三个月就会过期,每次都去手动申请,着实让人头痛。后来到Let’s Encrypt官网看了下,在它提供的ACME协议客户端列表中,最推荐使用Certbot。 Certbot是有个最大的好处是,能自动化部署Let...

2018-08-12 23:31:01 1710 0

原创 Tesseract与tess4j验证码识别

验证码,英文名CAPTCHA,全称叫做:全自动区分计算机和人类的图灵测试。验证码主要为了防一些不怀好意的人(程序猿),避免批量注册账户,暴力尝试多次登录失败等一些恶意行为。 最经典的就是文字型的验证码: 简单的文字型验证码容易被OCR识别,所以程序猿们让文字随机旋转、扭曲、黏连,在验证码上...

2018-06-30 15:48:54 4371 0

原创 MySQL性能优化[理论篇]-聚簇索引和非聚簇索引,InnoDB和MyISAM

聚簇索引 聚簇索引(Clustered Index)并不是一种新的数据结构,只是B树索引的一种存储方式。 聚簇索引的特点是完整的数据行就放在B树的叶子结点中,Clustered(聚簇,集群)就表示数据行与对应的键紧凑的存储在一起。 下图是《高性能MySQL》聚簇索引的截图,其中,叶子结点包含...

2018-05-27 01:49:45 1222 0

原创 MySQL性能优化[实践篇]-复合索引实例

上篇文章最后提了个问题 假设某个表有一个复合索引(c1,c2,c3,c4),问以下查询中只能使用该复合索引的c1,c2,c3部分的有那些 1. where c1=x and c2=x and c4>x and c3=x 2. where c1=x and c2=x an...

2018-05-26 17:02:11 1047 0

原创 MySQL性能优化[实践篇]-索引合并与复合索引

从上一篇创建索引的实践中,我们看到了索引给我们带来的性能提升是非常可观的。 我们上次创建的表结构非常简单,只有两三个字段,where子句查询条件只有一个字段。 实际应用场景中我们的表结构会更复杂,查询条件也会非常多。在多条件查询的情况下又如何才能用到索引呢,我们可以测试一下。 准备测试数...

2018-05-20 19:07:01 1976 0

原创 对单页面应用与Router的一些思考

昨晚鑫哥到我宿舍聊天,聊了很多,从各自公司用的技术到杭州和深圳的房价,从后端技术到前端技术,一直聊到凌晨一点多,直到鑫哥被室友“驱逐”出去。中间有一段聊到公司用到的React,提到了单页面应用和Router,觉得思路很好有必要写个笔记记下来。 最开始的网页 早期的网页都是一个个独立的htm...

2018-04-27 14:24:53 1001 0

原创 MySQL性能优化[实践篇]-使用B树索引

准备测试数据 create table tb_user( id int auto_increment primary key, name varchar(10), birth date ); 使用存储过程创建测试数据,不过在这之前我们先创建两个工具函数。 mysql里面...

2018-04-24 15:03:23 581 0

原创 MySQL性能优化[理论篇]-B树索引与hash索引

对索引的优化是数据库性能优化方面最重要的一项,也是性能提升最显著的。 如果把数据库比作一本新华字典,那索引就是字典前面的目录了。如果不使用目录,想从字典中直接找某个字的解释,难度可想而知,但是有了目录,我们可以先从目录中找到这个字对应的页码,然后再翻到相应的页码,就能找到这个字的完整解释...

2018-04-20 00:19:34 1105 0

原创 Win32开发小回忆

这两天阿瘦找我给他的一个程序写个界面,听说是要参加啥三创比赛(都大四老狗了,汗),然后问要用什么语言——C/C++,Windows平台的。他之前没怎么接触过C++方面的界面开发,然后我就开始了一波Windows教学,顺便自己也回忆回忆(大一大二玩了一年多,之后几乎就没碰过)。 先看一下整体流程,...

2018-04-14 03:19:06 680 0

原创 B树与B+树

从二叉搜索树说起 其实上一篇文章已经对BST进行过讨论,并对AVL,红黑树这样的自平衡二叉查找树分别解决了什么问题进行了讨论。 上面这些数据结构理论上能达到O(log2N)O(log2N)O(log_2N)的平均时间复杂度。 这个时间复杂度是基于对内存的操作而计算出来的。倘若我们的数据量...

2018-04-06 02:47:24 618 0

原创 二叉搜索树BST,AVL,红黑树,伸展树

从线性查找和二分查找说起 线性查找是最基础(野蛮)的查找算法,最坏的情况从头遍历到位,最好的情况比较一次,平均时间复杂度为N2N2\frac{N}{2}。 二分查找能达到O(log2N)O(log2N)O(log_2N)的时间复杂度,但是前提是列表中的数据必须是有序的。 不管是基于数组实...

2018-03-26 00:11:53 1064 4

原创 两种纯CSS的方式实现优惠券上的锯齿效果

昨天有个模块分到我手里了,有个优惠券的组件要封装,正好复习复习CSS。 优惠券最主要就是这个锯齿的问题。其实用图片做也完全可以,反正最后那些小图片都会被webpack编码成Base64的DataURL 关于DataURL的内容可以参考RFC2397 不过用图片方式就没有啥挑战性了,那...

2018-03-22 01:46:27 15095 6

原创 DX面经

马上大学毕业了,来HZ找实习生工作,一次电话面试问的问题比那些面对面的问问题更清楚,单刀直入,让我记忆深刻。 面试官:先说一下Object类里面的方法。 我:首先就是hashCode和equals方法吧,这两个方法主要用在HashMap里面,因为HashMap存数据的时候要根据key的...

2018-03-18 20:19:38 280 0

原创 Struts2怎么使用OGNL的

这几天整理笔记,发现了以前的几篇文章没发出来 在之前的一篇文章中我们看到了OGNL的强大功能。 OGNL并不是专门为Struts2框架而设计的,它是用于获取和设置Java对象属性的一种独立的表达式语言。 所以在看这篇文章之前建议先把之前的一篇文章看完。 Struts...

2018-03-17 18:12:48 517 0

原创 Javaer眼中的JS

把之前写的笔记整理了一下,重新拾起JS 基本数据类型 JS Java number double boolean boolean string String null(Object类型的null引用) null ...

2018-03-16 23:17:30 263 1

原创 React入门学习笔记

React介绍 谷歌大法,一搜一大把 React环境安装 安装react,react-dom模块: cnpm install react react-dom --save 因为react中使用了JSX语法,所以需要babel进行转换: cnpm install babel-...

2018-03-16 19:18:09 188 0

原创 Babel入门教程

babel有什么用 ES6标准从ES2015制定开始已经有几个年头了,虽然各大浏览器最新版都在极力地实现标准,但并不是所有人都会用最新版本的浏览器,特别是天朝像某狗某游这样的二次包装的浏览器,使用别人的内核而且版本更新又比较慢,导致新标准不能及时地在浏览器端使用。 Babel就是用来解决这个问...

2018-03-16 01:24:35 1253 0

原创 ES6学习笔记-OOP面向对象编程

ES5中使用构造函数定义类 ES6之前定义一个类,都是通过定义构造函数实现: function Rectangle(x,y){ this.x = x; this.y = y; } Rectangle.prototype.area = function(){ return x *...

2018-03-15 17:58:33 408 0

原创 ES6语法学习-JS中的lambda:箭头函数

1. 最基本的写法 使用=>操作符,简化匿名函数的定义 (param1,param2,...,paramN) => { // 函数体 } // 参数列表与箭头符号不能换行 var func = () => 1; // S...

2018-03-14 14:50:33 2565 0

原创 ES6学习笔记-解构赋值

解构赋值 解构赋值可以将数组中的元素或对象中的属性赋值给指定的变量。 1. 数组解构 1.1 基本用法 var a, b, rest; // 数组解构 [a, b] = [10, 20]; console.log(a); // 10 console.log(b); // 20 ...

2018-03-14 13:30:08 205 0

原创 ES6学习笔记-var,let,const

var,let和const ES6新增了let关键字用于声明变量,用法上和var类似,这里列举一些两者的区别。 let与var区别 let声明的变量只在它所在的代码块内有效: 因为上面的特性,所以let很适合在for循环中做计数器: var声明的变量会被挂在到全局的window上...

2018-03-14 10:09:49 151 0

原创 MySQL性能优化[准备篇]-单条SQL性能剖析

上面一篇文章已经将慢查询语句记录到日志中,接着我们就要对单条SQL查询进行性能分析,了解它慢在何处,才能对症下药进行性能优化。 show profile show profile命令是MySQL5.1之后引入的,由开源社区的Jeremy Cole贡献。 1. 开启profiling ...

2018-03-10 00:22:15 268 0

原创 MySQL性能优化[准备篇]-慢查询日志

在MySQL5.0及之前的版本中,慢查询日志的响应时间单位是秒。显然对于互联网与电子商务如此发达的现在,“秒”级别的查询实在太慢了。在MySQL5.1及更新的版本中,慢查询日志的功能得到了增强,甚至可以通过设置long_query_time为0来捕获所有的查询。 在MySQL的当前版本中,慢查询...

2018-03-10 00:15:52 1136 0

翻译 A Java Fork/Join Framework

原文链接:A Java Fork/Join Framework(PDF) - Doug Lea 基于并发编程网 – ifeve.com上 Alex/萧欢 翻译、方腾飞 校对的译文稿:Java Fork Join 框架 译文发在并发编程网 – ifeve.com:J...

2018-02-24 14:06:34 391 0

翻译 位运算的奇技淫巧:Bit Twiddling Hacks

原文名:Bit Twiddling Hacks 原文地址:http://graphics.stanford.edu/~seander/bithacks.html 作者:Sean Eron Anderson, seander@cs.stanford.edu 本文所包含的...

2018-02-24 13:31:36 3085 1

原创 Java多线程复习与巩固(七)--任务调度线程池ScheduledThreadPoolExecutor

强烈建议看本文之前,先把《Java多线程复习与巩固(六)–线程池ThreadPoolExecutor》看完。首先因为ScheduledThreadPoolExecutor继承自ThreadPoolExecutor,不了解ThreadPoolExecutor的原理看本文可能会有些吃力;另外本文的行文...

2018-02-22 00:07:34 1019 0

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