自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

你听___

情怀

  • 博客(39)
  • 资源 (2)
  • 收藏
  • 关注

原创 eslint+husky+prettier+lint-staged提升前端应用质量

1. 引入扫描工具的初衷1.1 针对痛点目前在梳理前端应用时发现很多代码不规范的地方,包括简单的js问题以及代码格式化的问题,造成了代码可读性下降,另外各种历史代码也是“风格迥异”,甚至影响了应用质量。应用开发成员大部分由于之前是开发后端,对前端开发经验不足以及许多前端知识体系都是在开发过程中现学现用慢慢积累的,另外,痛定思痛总在想对于前端应用代码质量是否也存在诸如Java开发规约扫描插件,类...

2019-02-17 18:04:20 5086

原创 入Ali的过去一年,谈谈我对code-review的理解

1. what—什么是CRcodereview(CR)一直以来在软件行业被视为提升代码质量的一种有效的方式,也被视为一种工程师文化的代表。关于什么是CR,在goole出具体的定义如下:代码评审是指在软件开发过程中,对源代码的系统性。通常的目的是查找系统缺陷,保证软件总体质量和提高开发者自身水平。 Code Review是轻量级代码评审,相对于正式代码评审,轻量级代码评审所需要的各种成本要明显...

2019-01-14 08:48:48 1376

原创 13篇文章,教你学会ES6知识点

ES6深入理解ES6》学习笔记本文用于汇总链接到各个子章节的内容,github 欢迎大家题issues和PR,如果对你有帮助,也可以给 star 支持 :)目录第一章 块级绑定第二章 字符串和正则表达式第三章 函数第四章 扩展的对象功能第五章 解构:更方便的数据访问第六章 Symbol和Symbol属性第七章 Set与Map第八章 迭代器(Iterator)...

2018-05-08 15:46:40 603

原创 深入理解ES6--13.用模块封装代码

主要知识点:什么是模块、模块中的导出、模块中的导入1. 什么是模块?模块(Modules ) 是使用不同方式加载的 JS 文件(与 JS 原先的脚本加载方式相对) 。这种不同模式很有必要,因为它与脚本(script ) 有大大不同的语义:模块代码自动运行在严格模式下,并且没有任何办法跳出严格模式;在模块的顶级作用域创建的变量,不会被自动添加到共享的全局作用域,它们只...

2018-05-08 14:39:07 630

原创 【Java并发专题】27篇文章详细总结Java并发基础知识

努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事!github:https://github.com/CL0610/Java-concurrency,欢迎题issue和Pull request。所有的文档都是自己亲自码的,如果觉得不错,欢迎给star鼓励支持 :)整个系列文章为Java并发专题,一是自己的兴趣,二是,这部分在实际理解上很有难度,另外在面试过程中也是经常...

2018-05-07 19:16:00 1348 1

原创 深入理解ES6--6.符号与符号属性

主要知识点:创建符号值、使用符号值、共享符号值、符号值转换。检索符号值属性以及知名符号1. Symbol基础1.1 创建符号值在 JS 已有的基本类型(字符串、数值、布尔类型、 null 与 undefined ) 之外, ES6 引入了一种新的基本类型:符号(Symbol ) 。 符号起初被设计用于创建对象私有成员,而这也是 JS 开发者期待已久的特性。在符号诞生...

2018-05-07 19:08:00 4599

原创 并发容器之ArrayBlockingQueue和LinkedBlockingQueue实现原理详解

1. ArrayBlockingQueue简介在多线程编程过程中,为了业务解耦和架构设计,经常会使用并发容器用于存储多线程间的共享数据,这样不仅可以保证线程安全,还可以简化各个线程操作。例如在“生产者-消费者”问题中,会使用阻塞队列(BlockingQueue)作为数据容器,关于BlockingQueue可以看这篇文章。为了加深对阻塞队列的理解,唯一的方式是对其实验原理进行理解,这篇文章就主要...

2018-05-06 16:35:59 442

原创 并发容器之BlockingQueue

1. BlockingQueue简介2. 基本操作3. 常用的BlockingQueue1. BlockingQueue简介在实际编程中,会经常使用到JDK中Collection集合框架中的各种容器类如实现List,Map,Queue接口的容器类,但是这些容器类基本上不是线程安全的,除了使用Collections可以将其转换为线程安全的容器,Doug Lea大师为我们都准备了...

2018-05-06 16:31:47 374

原创 并发容器之CopyOnWriteArrayList

1. CopyOnWriteArrayList的简介java学习者都清楚ArrayList并不是线程安全的,在读线程在读取ArrayList的时候如果有写线程在写数据的时候,基于fast-fail机制,会抛出ConcurrentModificationException异常,也就是说ArrayList并不是一个线程安全的容器,当然您可以用Vector,或者使用Collections的静态方法将...

2018-05-06 15:58:52 188

原创 一篇文章,从源码深入详解ThreadLocal内存泄漏问题

1. 造成内存泄漏的原因?threadLocal是为了解决对象不能被多线程共享访问的问题,通过threadLocal.set方法将对象实例保存在每个线程自己所拥有的threadLocalMap中,这样每个线程使用自己的对象实例,彼此不会影响达到隔离的作用,从而就解决了对象在被共享访问带来线程安全问题。如果将同步机制和threadLocal做一个横向比较的话,同步机制就是通过控制线程访问共享对象...

2018-05-06 15:53:18 211

原创 并发容器之ThreadLocal

1. ThreadLocal的简介2. ThreadLocal的实现原理3. ThreadLocalMap详解3.1 Entry数据结构3.2 set方法3.3 getEntry方法3.4 remove4. ThreadLocal的使用场景1. ThreadLocal的简介在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对...

2018-05-06 15:43:25 215

原创 并发容器之ConcurrentLinkedQueue

1.ConcurrentLinkedQueue简介在单线程编程中我们会经常用到一些集合类,比如ArrayList,HashMap等,但是这些类都不是线程安全的类。在面试中也经常会有一些考点,比如ArrayList不是线程安全的,Vector是线程安全。而保障Vector线程安全的方式,是非常粗暴的在方法上用synchronized独占锁,将多线程执行变成串行化。要想将ArrayList变成线程...

2018-05-06 15:30:41 2719 2

原创 并发容器之ConcurrentHashMap(JDK 1.8版本)

1.ConcurrentHashmap简介在使用HashMap时在多线程情况下扩容会出现CPU接近100%的情况,因为hashmap并不是线程安全的,通常我们可以使用在java体系中古老的hashtable类,该类基本上所有的方法都采用synchronized进行线程安全的控制,可想而知,在高并发的情况下,每次只有一个线程能够获取对象监视器锁,这样的并发性能的确不令人满意。另外一种方式通过Co...

2018-05-06 15:15:30 191

原创 LockSupport工具

1. LockSupport简介在之前介绍AQS的底层实现,已经在介绍java中的Lock时,比如ReentrantLock,ReentReadWriteLocks,已经在介绍线程间等待/通知机制使用的Condition时都会调用LockSupport.park()方法和LockSupport.unpark()方法。而这个在同步组件的实现中被频繁使用的LockSupport到底是何方神圣,现在...

2018-05-06 15:00:36 196

原创 详解Condition的await和signal等待/通知机制

1.Condition简介任何一个java对象都天然继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制,同样的, 在java Lock体系下依然会有同样的方法实现等待/通知机制。从整体上来...

2018-05-06 14:54:40 17328 6

原创 深入理解ES6--2.字符串与正则表达式

主要知识点:新增的字符串处理方法、模板字面量以及正则表达式上的改动1. 字符串处理方法 codePointAt()方法ES6 为全面支持 UTF-16 而新增的方法之一是 codePointAt() ,它可以在给定字符串中按位 置提取 Unicode 代码点。该方法接受的是码元位置而非字符位置,并返回一个整数值。 String.fromCodePoint()...

2018-05-06 14:43:03 269

原创 深入理解ES6--12.代理与反射接口

主要知识点:代理和反射的定义、常用的陷阱函数、可被撤销的代理、将代理对象作为原型使用、将代理作为类的原型1. 代理和反射 代理是什么?通过调用 new Proxy() ,你可以创建一个代理用来替代另一个对象(被称之为目目标对象) ,这个代理对目标对象进行了虚拟,因此该代理与该目标对象表面上可以被当作同一个对象来对待。代理允许你拦截目标对象上的底层操作,而这本来...

2018-05-05 21:17:17 210

原创 深入理解读写锁ReentrantReadWriteLock

1.读写锁的介绍在并发场景中用于解决线程安全的问题,我们几乎会高频率的使用到独占式锁,通常使用java提供的关键字synchronized(关于synchronized可以看这篇文章)或者concurrents包中实现了Lock接口的ReentrantLock。它们都是独占式获取锁,也就是在同一时刻只有一个线程能够获取锁。而在一些业务场景中,大部分只是读数据,写数据很少,如果仅仅是读数据的话并...

2018-05-03 21:28:10 271 3

原创 彻底理解ReentrantLock

1. ReentrantLock的介绍ReentrantLock重入锁,是实现Lock接口的一个类,也是在实际编程中使用频率很高的一个锁,支持重入性,表示能够对共享资源能够重复加锁,即当前线程获取该锁再次获取不会被阻塞。在java关键字synchronized隐式支持重入性(关于synchronized可以看这篇文章),synchronized通过获取自增,释放自减的方式实现重入。与此同时,R...

2018-05-03 21:13:19 13857 6

原创 深入理解AbstractQueuedSynchronizer(AQS)

1. AQS简介在上一篇文章中我们对lock和AbstractQueuedSynchronizer(AQS)有了初步的认识。在同步组件的实现中,AQS是核心部分,同步组件的实现者通过使用AQS提供的模板方法实现同步组件语义,AQS则实现了对同步状态的管理,以及对阻塞线程进行排队,等待通知等等一些底层的实现处理。AQS的核心也包括了这些方面:同步队列,独占式锁的获取和释放,共享锁的获取和释放以及...

2018-05-03 21:01:39 160

原创 初识Lock与AbstractQueuedSynchronizer(AQS)

1. concurrent包的结构层次在针对并发编程中,Doug Lea大师为我们提供了大量实用,高性能的工具类,针对这些代码进行研究会让我们队并发编程的掌握更加透彻也会大大提升我们队并发编程技术的热爱。这些代码在java.util.concurrent包下。如下图,即为concurrent包的目录结构图。其中包含了两个子包:atomic以及lock,另外在concurrent下的阻塞...

2018-05-03 20:50:49 345

原创 三大性质总结:原子性、可见性以及有序性

1. 三大性质简介在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchronized和volatile已经讨论过了,就想着将并发编程中这两大神器在 原子性,有序性和可见性上做一个比较,当然这也是面试中的高频考点,值得注意。2. 原子性原子性是...

2018-05-03 20:38:44 5383 1

原创 深入理解ES6--11.Promise与异步编程

主要知识点:Promise生命周期、Promise基本操作、Promise链、响应多个Promise以及集成Promise1. Promise基础2. Promise链3. 响应多个Promise4. 继承Promise5. 总结1. Promise基础 什么是回调地狱?当使用回调函数来进行事件处理的时候,如果嵌套多层回调函数的时候,就会出现回调...

2018-05-03 16:25:06 407

原创 你以为你真的了解final吗?

1. final的简介2. final的具体使用场景2.1 变量2.1.1 final成员变量2.2.2 final局部变量2.2 方法2.3 类3. final的例子4. 多线程中你真的了解final吗?4.1 final域重排序规则4.1.1 final域为基本类型4.1.2 final域为引用类型5.final的实现原理6. 为什么final引用...

2018-05-02 21:11:00 37412 3

原创 彻底理解volatile

1. volatile简介在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其中奥妙,我们来共同探讨下。通过上一篇的文章我们了解到synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁。而volatile就可以说是java虚拟机提供的最轻量级的同步机...

2018-05-02 20:53:55 152

原创 深入理解ES6--9.JS的类

主要知识点:类声明、类表达式、类的重要要点以及类继承1. 类的声明 基本的类声明类声明以class关键字开始,其后是类的名称;类中的方法就像是对象字面量中的方法简写,并且方法之间不需要使用逗号:class PersonClass{ constructor(name){ this.name = name; } sayNam...

2018-05-02 20:37:14 213

原创 深入理解ES6--8.迭代器与生成器

主要知识点:迭代器、生成器、可迭代对象以及for-of循环、迭代器的高级功能以及创建异步任务处理器1. 迭代器 何为迭代器?迭代器是被设计专用于迭代的对象,带有特定接口。所有的迭代器对象都拥有 next() 方 法,会返回一个结果对象。该结果对象有两个属性:对应下一个值的 value ,以及一个布尔 类型的 done ,其值为 true 时表示没有更多值可供使用。...

2018-05-01 19:56:55 318

原创 深入理解ES6--7.Set和Map

主要知识点:Set的基本操作,Weak Set,Map的基本操作,Weak Map1.ES6中的SetES6中提供了Set数据容器,这是一个能够存储无重复值的有序列表。 创建Set通过new Set()可以创建Set,然后通过add方法能够向Set中添加数据项://Setlet set= new Set();set.add(1);set.add('1...

2018-04-30 20:48:58 129

原创 彻底理解synchronzied

1. synchronized简介2. synchronized实现原理2.1 对象锁(monitor)机制2.2 synchronized的happens-before关系2.3 锁获取和锁释放的内存语义3. synchronized优化3.1 CAS操作3.1.1 什么是CAS?3.1.2 CAS的操作过程3.1.3 CAS的应用场景3.1.4 CAS的问题3...

2018-04-30 17:35:01 437

原创 线程状态转换以及基本操作

在上一篇文章中并发编程的优缺点谈到了为什么花功夫去学习并发编程的技术,也就是说我们必须了解到并发编程的优缺点,我们在什么情况下可以去考虑开启多个线程去实现我们的业务,当然使用多线程我们应该着重注意一些什么,在上一篇文章中会有一些讨论。那么,说了这么多,无论是针对面试还是实际工作中作为一名软件开发人员都应该具备这样的技能。万事开头难,接下来就应该了解如何新建一个线程?线程状态是怎样转换的?关于线程状...

2018-04-30 16:08:56 420

原创 并发编程的优缺点

一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发?凡事总有好坏两面,之间的trade-off是什么,也就是说并发编程具有哪些缺点?以及在进行并发编程时应该了解和掌握的概念是什么?这篇文章主要以这三个问题来谈一谈。1. 为什么要用到并发一直以来,硬件的发展极其迅速,也有一个很著名的”摩尔定律”,可能会...

2018-04-30 15:31:52 3531

原创 深入理解ES6--5.解构:更方便的数据访问

主要知识点:对象解构、数组解构、混合解构以及参数解构1. 对象解构2. 数组结构3. 参数解构4. 总结1. 对象解构 对象解构语法对象解构语法在赋值语句的左侧使用了对象字面量,例如:let person ={ name:'hello', age:18}let {name,age}=person;console.log(n...

2018-04-29 13:26:18 249

原创 git基本操作,一篇文章就够了!

1. git简介2. git配置命令3. 工作区上的操作命令4. 暂存区上的操作命令5.本地仓库上的操作6. 忽略文件.gitignore1. git简介在实际开发中,会使用git作为版本控制工具来完成团队协作。因此,对基本的git操作指令进行总结是十分有必要的,本文对一些术语或者理论基础,不重新码字,可以参考廖雪峰老师的博文,本文只对命令做归纳总结。git的通...

2018-04-25 20:18:54 113

原创 深入理解ES6--4.扩展的对象功能

主要知识点有对象类别、属性速记法、方法简写、需计算属性名、Object.is()方法、Object.assign()方法、可允许重复的属性、自有属性的枚举顺序、Object.setPrototypeOf()方法、super引用、方法定义1. 对象类别对象有以下几种类别:普通对象:拥有JS对象所有默认的内部行为;奇异对象:其内部行为在某些方面有别于默认行为;标准对象:在...

2018-04-22 12:10:58 195

原创 深入理解ES6--3.函数

主要知识点有:函数参数默认值、剩余参数、扩展运算符、new.target属性、块级函数、箭头函数以及尾调用优化1. 函数参数默认值函数参数默认值 let defaultFunc = function(url,tomeout=2000,callback={}){}; //使用默认的timeout和callback defaultFunc('/url...

2018-04-20 17:17:35 153

原创 深入理解ES6--1.块级绑定

主要知识点有:var变量提升、let声明、const声明、let和const的比较、块级绑定的应用场景1. var声明以及变量提升2. let声明3. const声明4. let与const的比较5. 块级绑定的使用场景6. 总结1. var声明以及变量提升变量提升:使用var声明变量,变量的创建并不在声明变量的地方,而是会在当前作用域的顶部。如...

2018-04-18 15:43:22 185

原创 MySQL基本操作总结

MySQL的基本操作可以包括两个方面:MySQL常用语句如高频率使用的增删改查(CRUD)语句和MySQL高级功能,如存储过程,触发器,事务处理等。而这两个方面又可以细分如下:MySQL常用语句表(或者数据库)的CRUD表数据的CRUD,其中表数据查询使用最多,也更复杂。查询可以按照单表还是多表可以分为:单表SELECT查询和多表的联结查询(INNER JOIN, LEFT J...

2018-04-15 09:47:19 13681 3

原创 Java8新特性都到碗里来

对于Java开发者来说,Java8的版本显然是一个具有里程碑意义的版本,蕴含了许多令人激动的新特性,如果能利用好这些新特性,能够大大提升我们的开发效率。Java8的函数式编程能够大大减少代码量和便于维护,同时,还有一些跟并发相关的功能。开发中常用到的新特性如下: 1. 接口的默认方法和静态方法 2. 函数式接口FunctionInterface与lambda表达式 3. 方法引用 4....

2018-04-15 09:44:44 254

原创 Java并发总结--校招面经

努力的意义,就是,在以后的日子里,放眼望去全是自己喜欢的人和事!时间总是不知不觉的就溜走了,一晃,学生时代就真的要结束了。前天才吃完了师门的最后的聚餐,痛痛快快的喝了一顿酒。在酒中,对身边的人感恩,也像是自己在对自己的学生时代告别。自己也特别喜欢校园这种简单单纯,让人觉得很青春年轻的感觉,但是,是该开启另一段人生旅程了。从去年结束秋招,但现在忙完毕业论文答辩,这段时间应该算是“...

2018-04-15 09:34:54 922 1

AVR单片机经典教程

AVR单片机经典教程,含有仿真图,简单易学,容易上手我也是这样一步步走过来的,需要配套的视频教程可以联系我

2013-07-30

基于TLC0820的ADC

基于TLC0820的ADC资料完整的源代码及各种资料是初学者的好的参考资料

2013-07-26

空空如也

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

TA关注的人

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