自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sam_Deep_Thinking

努力深入思考和总结

  • 博客(298)
  • 资源 (1)
  • 问答 (12)
  • 收藏
  • 关注

原创 自旋锁-概念

不放弃CPU时间线程获取不到锁,就会被阻塞挂起,等其他线程释放锁的时候,才被唤醒起来。线程挂起和唤醒是需要转入到内核态完成的,这些操作对系统的并发性能会带来影响。其实有时候线程虽然没法立刻获取到锁,但是也可能很快就会获取到锁。 能不能给多些机会让获取不到锁的线程在CPU里多待上一段时间,尝试去获取锁。因为线程对共享数据的锁定可能只是持续一小段时间而已,之后便会释放资源锁。JVM采用了一种叫自

2017-02-18 22:43:13 1369 2

原创 synchronized关键字加锁-线程可重入

synchronized加载加锁-线程可重入

2017-02-16 22:29:41 1098 6

原创 JVM调优-学习篇

JVM调优学习。

2017-02-14 21:57:28 10524

原创 Future模式学习

Future模式

2017-02-13 23:33:35 960 4

原创 生产者-消费者模式

概述生产者-消费者模式在系统交互方面,有两个特点: 1、系统解耦 2、解决并发问题下面用几个简单例子逐步说明。 简单例子假设有两个系统,A系统和B系统,B系统需要依赖A系统产生的数据,也就是说,A系统产生数据后,必须把数据扔给B系统。 这个时候,可以让B系统提供一个方法,比如说提供一个http接口sendData(),然后A系统直接调用即可。这种方案在流量不大的情况下,完全没问题的,但

2017-02-13 14:54:44 2876

原创 学习JAVA类加载器

概述JAVA语言利用虚拟机来加载class文件,并执行代码。任何JAVA文件,经过编译生成的class文件只要符合规范,就可以被虚拟机加载并执行。 类加载器的分类类加载器有两个分类,一种是用于加载JAVA核心组件的启动类加载器(bootstrap class loader),另一种是用户自定义的类加载器,定义这样的加载器需要继承java.lang.ClassLoader。但是如果没有什么特别

2017-02-12 12:34:18 1240

原创 HTTP1.0 HTTP 1.1 HTTP 2.0主要区别

HTTP1.0 HTTP 1.1主要区别长连接HTTP 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而HTTP1.1默认支持长连接。HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。节约带宽HTTP 1.1支持只发送header信息(

2017-02-11 13:48:07 76688 4

原创 Mysql 索引知识点

介绍MySql的索引知识点。

2017-02-08 11:54:46 1740 1

原创 Mysql B+树学习

概述要描述清楚B+树,得先了解二叉查找数,平衡二叉树。 二叉查找树任意节点,它的左子树如果不为空,那么左子树上所有节点的值都小于根节点的值; 任意节点,他的右子树如果不为空,那么右子树上的所有节点的值大于根节点的值。这个特性给查找带来了方便,如上图,要找key=3的键值,只要从6这个节点左子树进行递归查找即可,右子树的节点可以完全不理会。 平衡

2017-02-08 00:56:37 7558 4

原创 学习NIO

介绍NIO的知识。

2017-02-06 23:57:54 5932 4

原创 Object wait方法

概述当线程B访问某个共享资源时,想获取资源的锁对象,发现这个锁已经被线程A拿到了,这个时候,线程B只能被挂起,等待线程A释放锁。但是拿到锁的线程A在执行的过程中,因为某些条件还不满足,暂时不想继续执行下去,想先等待一下(注意:是已经拿到锁的线程A自己想主动等待的),希望等到某个条件满足后,继续执行任务。在同步代码块里,线程A必须先释放锁,线程B才有资格获取锁,进入同步代码块,执行代码。等线程B执行

2017-02-04 14:54:22 8527 4

原创 ConcurrentHashMap学习

概述ConcurrentHashMap绝对是经典之作,里面的设计思想可以开拓我们的编程思路。想在高并发多线程环境使用一个Map的话,ConcurrentHashMap是首选,它不只性能高,还是线程安全的。我们最常使用的HashMap是线程不安全的,可以参考HashMap多线程下发生死循环的原因 减小锁的粒度HashTable虽然是线程安全的,但是所用的锁的粒度是

2017-02-03 01:44:02 1250 2

原创 学习volatile关键字

volatile关键字要用好很难,使用它的场景也不多,但是在某些场景下,volatile变量是线程安全的,并且开销比synchronized关键字要低。基础知识锁的两大特性”互斥” 与 “可见性”。 互斥是说,每次都得等先拿到锁的线程把锁释放了,其他线程才有资格访问共享资源,期间线程对共享资源时独占的。而可见性是指,一个线程修改了某个共享变量的值,其他线程能读取到最新的值,而不至于读取到脏数据。C

2017-01-31 22:25:29 1125 2

原创 学习一下CAS

学习一下CAS

2017-01-31 08:16:35 1420

原创 HashMap多线程下发生死循环的原因

概述大神陈皓已经在疫苗:JAVA HASHMAP的死循环一文中详细描述了HashMap多线程下产生死循环的原因,我仔细研读了这篇大作,做了一些笔记,加上自己的一些理解 整理出一些信息,发出来与大家交流交流。 HashMap存储的数据结构陈皓在Hash表数据结构这一节提到了HashMap的数据结构以及扩容问题,关于这一点我之前写过的 HashMap的put和get方法原理和HashMap扩

2017-01-25 11:39:54 8947 10

原创 HashMap扩容

`HashMap`的size大于等于(**容量*加载因子**)的时候,会触发扩容的操作,这个是个代价不小的操作。为什么要扩容呢?`HashMap`默认的容量是16,随着元素不断添加到`HashMap`里,出现`hash`冲突的机率就更高,那每个桶对应的链表就会更长,这样会影响查询的性能,因为每次都需要遍历链表,比较对象是否相等,一直到找到元素为止。为了提升查询性能,只能扩容,减少`hash`冲突,让元素的`k

2017-01-24 11:54:31 3700 1

转载 转载张龙老师一篇关于IntelliJ IDEA的介绍

IntelliJ IDEA

2017-01-24 00:46:04 905

原创 Dojo到底还有没有人用呢

哎。`DOJO`研究了一段时间了,但是问了周围的同事以及其他互联网公司的同事,都说没用`DOJO`。个人觉得如果是做后台应用的界面端的话,`DOJO`是个不错的选择,严格的面向对象,组件又多也很规范。但是目前大家宁愿选择jquery ui、easyui等等。搞不懂??搞得我都不想继续看`DOJO`了。

2017-01-24 00:35:59 4661 12

原创 HashMap的put和get方法原理

概述JAVA中的数组,在添加或者删除元素的时候,都会复制一个新数组,比较耗内存。但是数组的遍历则是非常高效的。链表则是相反, 遍历慢(需要遍历数组,一直找到值相等的元素才算找到),而添加和删除元素代价低。有没有办法结合两者的特点,做到寻找元素快,插入元素或者删除元素代价低呢?答案是利用哈利表。HashMap put操作当使用HashMap的put方法的时候,有两个问题要解决:1、长度为16的数组中

2017-01-23 15:02:16 45083 16

原创 你去面试,需要准备什么知识点?

概述又是新的一年了,去年的绩效也出来了,总是几家欢乐几家愁。绩效好的机会多的老板信任的,在新的一年会更加有干劲。绩效不好的,老板不看好的,可能新的一年就会有离职的冲动。 如果你有离职的想法,那么还是需要花一些时间准备一下,毕竟现在外面好的互联网公司对程序员的要求还是蛮高的,需要你有各种能耐。下面这篇文章主要是介绍一下去好公司面试的时候,面试官可能会问到的一些知识点。后续会陆续的补充的。也欢迎网友补

2017-01-18 16:34:38 2438 25

原创 线程安全的CopyOnWriteArrayList介绍

证明CopyOnWriteArrayList是线程安全的先写一段代码证明CopyOnWriteArrayList确实是线程安全的。ReadThread.javaimport java.util.List;public class ReadThread implements Runnable { private List<Integer> list; public ReadThread(

2017-01-17 16:07:19 44592 29

原创 Short类型的List contains(Byte.valueOf("1"))的问题

概述最近测试人员发现了一个bug,我找了半天,一直找不到bug的原因。后来debug代码的时候,才发现一个隐藏的bug。如下代码:private static List<Short> tempList = Arrays.asList(new Short [] {13,17,18,20});这个时候用如下代码判断某个数字是否在tempList中:if (tempList.contains(Byte.v

2017-01-16 19:58:38 1382

原创 利用子查询找出某个属性存在A表而不存在B表的数据

概述假设有两张表,A表和B表A表: id name age 1 xxx 15 2 yyy 18 3 zzz 20B表: id b_id age 1 1 15 2 2 18其中B表的b_id字段引用了A表的id字段。现在有个查询需求: 给出已知的A表中的id,比如:id in (1,2,3),找出这些id在B表中没有

2017-01-16 14:32:21 3877 5

原创 线程不安全的ArrayList

概述java.util.ArrayList不是线程安全的,当有多个线程并发读写ArrayList的时候,ArrayList会抛出如下异常java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:819) at java.util.

2017-01-15 23:02:49 1608

原创 SQL计算timestamp的差值小技巧

概述有时候我们需要按照时间找出某些记录,比如说:算出离销售时间前1个小时的记录。 通常我们可以使用MYSQL的timestampdiff函数来做,但是这样没法使用到索引,如果数据量大的话,会造成慢查询。用代码计算出时间后再传给SQL我们可以利用JAVA代码,先把时间计算好,然后传给SQL语句,避免使用MYSQL的函数。public long xxxx(long sellTimeFrom){

2017-01-13 13:45:19 3838

原创 照顾好应用的缓存-应付大流量

概述为了提升系统的响应速度,通常会系统中使用缓存,例如:中央缓存,本地缓存等。但是使用缓存有好有坏,坏处是,如果缓存数据是旧的,那么应用输出的数据便是错误的数据,可能造成严重的影响。本文介绍一些让缓存保持新鲜以及使用缓存的一些技巧。利用MQ实时刷新缓存一旦db数据发生变化,则可以发送一条mq消息,通知消费者,信息有变动,消费者感知到后,立刻调用刷新缓存的接口,把数据涮新到中央缓存里。这里有三个点要注

2017-01-12 11:06:01 1924

原创 对ArrayList元素分组去重

通常使用`SQL`查询一批数据的时候,可以利用`SQL`中的`GROUP BY `语句对数据进行分组,但是有时候出于对性能的考虑,不会使用`GROUP BY`,而是先把数据捞出来后,使用代码,在内存中按照某个属性进行分组。当然有时候还会对分组里面的数据进行去重,这个时候也可以利用覆盖对象的`hashCode`和`equals`方法,利用`HashSet`的去重特性来达到目的

2017-01-11 10:56:25 1842

原创 对ArrayList按照某个属性进行分组

概述通常使用SQL查询一批数据的时候,可以利用SQL中的GROUP BY语句对数据进行分组,但是有时候出于对性能的考虑,不会使用GROUP BY,而是先把数据捞出来后,使用代码,在内存中按照某个属性进行分组。代码public class SkuVo { private Long skuId; private String productName; private Long br

2017-01-11 10:18:29 17501 2

原创 对ArrayList进行分页

概述系统与系统之间的交互,通常是使用接口的形式。假设B系统提供了一个批量的查询接口,限制每次只能查询50条数据,而我们实际需要查询500条数据,这个时候可以对这500条数据做分批操作,分10次调用B系统的批量接口。如果B系统的查询接口是使用List作为入参,那么要实现分批调用的话,可以利用ArrayList的subList方法来处理。代码sublist方法的定义: List<E> subLis

2017-01-10 20:34:13 11196 4

原创 从团队项目中获取技术知识点

概述获取知识点的方式非常多,像阅读技术书籍,逛技术网站,看技术公众号等。但是想获取经受过考验,实实在在的知识点,或者叫有用的干货,也可以尝试从自己参与的项目中获取。一个项目一般都是由多个人一起协作开发的,每个人负责的模块也都不同,遇到的技术问题也都不同。一般来说,大部分人只是了解自己做的模块,而并不十分了解其他队友开发的模块。如果参与的项目是大型互联网项目,那就最好了。可以从这个项目里面学习到很多

2016-11-08 05:46:24 710

原创 程序员要注意身体健康

最近听说公司的几个同事都大病了一场,有的还进行了大的手术,差点跟阎王爷报道了。努力工作固然重要,但是一定注意身体,身体不好了,随着来的就是,工作和生活双失。我根据自己的实践,列举了几点习惯,可能可以帮助程序员调整一下工作和生活的节奏,从而达到生活和工作平衡,进而改进身体体质和健康。 1、请早睡早睡都做不到的话,其他就都别谈了。像要跑步,要健身,要努力工作,如果没有早睡作为前提,通通没用的。只有

2016-10-26 08:49:47 4793 12

原创 思路:针对某个业务场景,独立增加服务器集群去处理大流量

背景随着用户数越多,系统需要承受的冲击越来越大。举个例子,一般的电商应用都会搞双11这种活动,这个时候用户都会先收藏自己喜欢的商品,以便活动开始的时候,及时的抢购。当用户抢购的时候,系统必须应付瞬时大流量的冲击。处理这种情况,有很多种方案,像限流、增加服务器、多级缓存、应用跨机房部署等等。如果你清楚自己系统在哪种业务场景下会遭受瞬时大流量冲击,那么可以针对这种业务场景,单独...

2016-10-17 14:05:02 1161

原创 利用DB生成业务主键

概述利用DB生成业务主键,生成业务主键的方法各种各样,其中一种是利用DB表主键自增的方式来生成唯一性的业务主键,下文简单介绍一下。 代码以MySql作为例子,操作DB的数据层是Mybatis。CREATE TABLE `key_gen` ( `business_no` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',

2016-10-10 14:04:21 1939

原创 Intellij 比Eclipse好在哪儿呢?

现在最流行的JAVA IDE当属intellij 和Eclipse了,我在伯乐在线开了一个讨论帖,讨论的非常火热,想了解两者之间的对比情况,可以参看一下,持续关注一下。IntelliJ IDEA 到底在哪几方面比Eclipse好呢?

2016-10-10 07:42:06 7571

原创 能够提高开发效率的Eclipse实用操作-第二篇

概述最近网上一篇文章提到JAVA IDE中,Eclipse占比是41%,Intellij占比是46%。但是目前我依然不会选择Intellij作为日常的IDE。原因是周围的同事中,没有一个对Intellij非常熟悉,没有充分利用Intellij的特性来提高操作效率。相反,Eclipse中的各种操作,我算是属于用的精熟了。所以跟周围使用Intellij的同事相比,我用Eclipse 来操作代码,反而比

2016-09-30 14:31:54 3379 3

转载 测试的道理

转载王垠的一篇好文章。测试的道理

2016-09-26 14:04:58 653

转载 谈“测试驱动的开发”

转载王垠的一篇文章 : 谈“测试驱动的开发”

2016-09-07 20:21:52 523

转载 谈程序的“通用性”

转载王垠的一篇文章 : 谈程序的通用性

2016-09-07 20:19:48 1119

原创 数据存储在多张表,缓存维度简单设计

概述为了提升接口的响应速度,通常会使用中央缓存,比如增加一个memcache集群,用于存储热点数据。假设数据表是类似下面这样的:table a{ long id String name ......... .........}table b{long idlong a_idString name.................}table c...

2016-09-02 14:26:05 1961

原创 互联网高级测试工程师至少具备的能力

业务熟悉熟悉本系统测试人员参与测试的系统的各种业务场景,必须做到精熟 。一旦需求有改动,可以清楚快速的知道上下文。同时可以清楚的知道哪些点是需要重点测试的。熟悉跟本系统有通讯的上下游系统业务跟本系统有通讯的上下游系统也要非常熟悉。这样一旦系统出现问题,可以知道影响的范围。熟悉公司主流程业务熟悉公司主流程业务。虽然不是自己测试的系统,但是熟悉公...

2016-08-19 14:35:05 18064 47

空空如也

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

TA关注的人

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