自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个码农的博客

天才并非不可战胜,尤其是在面对年复一年不曾停歇的脚步

  • 博客(76)
  • 收藏
  • 关注

转载 在创业公司做架构师,是一种修炼

突然想起一句话,人生若只如初见,找伴侣如此,在公司干活也是一样。当你刚加盟一家初创公司的时候,总是豪情万丈,自信满满,但是问题总是出现的那么突然,没有一点点防备,创业公司甚至没有大公司的蜜月期,你就会面临很多问题。一、项目管理问题创业团队为了追求小快灵的模式,很多时候牺牲了项目本身的科学管理部分,例如项目计划倒排、任意变更需求、随意封闭开发加班加点,甚至

2016-03-09 18:25:55 1404

转载 什么样的公司值得加入?

毕业生首先应该最纠结的就是不知道简历该投给什么公司,或者没法判断什么样的公司才值得加入?对于做技术的优先选择互联网科技公司,没有别的原因,因为互联网公司才是真正的技术驱动型的,技术部是整个公司的核心部门,我相信除了薪资,大部分人都想加入一家公司的核心部门吧,举个例子,如果你去银行工作干着IT的活,你技术再牛逼,人家银行的核心部门永远是金融方面的业务,你这匹千里马可能很难遇到伯乐

2016-03-09 18:23:58 990

原创 Java 征途:行者的地图

第一张,基础图老实说,当时一进入 Java 世界的大门就晕了,各种规范、概念和英文缩写词能把人整的晕晕乎乎。  J2SE  J2EE  J2ME  JSP  JDBC  JMS  EJB  JNDI  JDBC  JTA

2016-03-08 08:23:25 872

转载 IT人员应该怎么跳槽

中国的程序员只有两个状态,刚跳槽和准备跳槽。中国IT行业的快速发展对IT从业人员的需求不断扩大,记得08年刚毕业的时候,在帝都找一个3k的工作都让我特别满足,现在仅能写出”hello world”的程序员开口不上5位数都不好意思说自己是做开发的,跳槽工资不涨一半都不好意思朋友圈发自己换工作。工作2-3年以上,简历就会在各大公司和猎头手中流转,如果一周没接几个hr或者猎头的电话,还真有点

2016-03-08 08:21:41 6870

转载 程序员怎么获得高工资

经常听见朋友抱怨自己水平和同事不相上下,甚至更强,工资却没有别人的高,主要原因有两个:1、技术面试:没有表现出来自己的能力2、人力面试:没有与人资谈薪资的技巧下面我们一起来分析一下这两个问题。在技术面试中一般会从3个方面考核个人能力,项目的开发能力,技术能力的广度和技术能力的深度。1、项目开发能力,面试中在个人的开场白后面试官会选择一

2016-03-08 08:19:28 2065

转载 如何用消息系统避免分布式事务?

在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统中,当用户点击某广告后,除了在点击事件表中增加一条记录外,还得去商家账户表中找到这个商家并扣除广告费吧,怎么保证?!等等,相信大家或多或多少都能碰到相似情景。本质上问题可以抽象为:当一个表数据更新后,怎么保证另一个表的数据也必须要更新成功。

2016-03-04 10:27:06 773

转载 8张图带你理解Java

一图胜千言,下面图解均来自Program Creek 网站的Java教程,目前它们拥有最多的票选。如果图解没有阐明问题,那么你可以借助它的标题来一窥究竟。1、字符串不变性下面这张图展示了这段代码做了什么String s = "abcd";s = s.concat("ef");2.equals()方法

2016-03-04 10:20:05 1259

转载 大型网站架构不得不考虑的 10 个问题

1、海量数据的处理众所周知,对于一些相对小的站点来说,数据量并不是很大,select和update就可以解决我们面对的问题,本身负载量不是很大,最多再加几个索引就可以搞定。对于大型网站,每天的数据量可能就上百万,如果一个设计不好的多对多关系,在前期是没有任何问题的,但是随着用户的增长,数据量会是几何级的增长的。在这个时候我们对于一个表的select和update的时候(还不说多

2016-03-04 10:18:16 471

转载 开发必会的 Linux 命令

1.查找文件find . -name "*.xml" 递归查找所有的xml文件find / -name filename.txt 根据名称查找/目录下的filename.txt文件。find . -name "*.xml" |xargs grep "hello world" 递归查找所有文件内容中包含hello world的xml文件find .

2016-03-04 10:16:28 1018

转载 20 个 Linux 命令面试问答

问:1 如何查看当前的Linux服务器的运行级别?答: ‘who -r’ 和 ‘runlevel’ 命令可以用来查看当前的Linux服务器的运行级别。问:2 如何查看Linux的默认网关?答: 用 “route -n” 和 “netstat -nr” 命令,我们可以查看默认网关。除了默认的网关信息,这两个命令还可以显示当前的路由表。问:3 如何在Linux上重建初始

2016-03-04 10:07:57 424

转载 Spring定时任务的几种实现

一.分类从实现的技术上来分类,目前主要有三种技术(或者说有三种产品):Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可

2016-03-04 10:05:08 358

转载 Java操作MongoDB

一、准备工作1、 首先,下载mongoDB对Java支持的驱动包驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloadsmongoDB对Java的相关支持、技术:http://www.mongodb.org/display/DOCS/Java+Language+Center驱动源码下载:https:

2016-03-04 10:03:31 467

转载 MAVEN常用命令

Maven库:http://repo2.maven.org/maven2/Maven依赖查询:http://mvnrepository.com/Maven常用命令: 1. 创建Maven的普通java项目:    mvn archetype:create    -DgroupId=packageName    -DartifactId=project

2016-03-04 10:02:06 308

转载 简述java内存模型

1. 概述  多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存模型和线程之前,先简单介绍一下硬件的效率与一致性。2.硬件的效率与一致性

2016-03-04 09:59:40 3703

转载 ClassPool介绍

1、简介ClassPool是缓存CtClass对象的容器,所有的CtClass对象都在ClassPool中。所以,CtClass对象很多时,ClassPool会消耗很大的内存,为了避免内存的消耗,创建ClassPool对象时可以使用单例模式,或者对于CtClass对象,调用detach方法将其从ClassPool中移除。2、创建ClassPool对象(1)构造函数1

2016-03-04 09:53:35 1511

转载 Javassist简单应用小结

概述  Javassist是一款字节码编辑工具,可以直接编辑和生成Java生成的字节码,以达到对.class文件进行动态修改的效果。熟练使用这套工具,可以让Java编程更接近与动态语言编程。  下面一个方法的目的是获取一个类加载器(ClassLoader),以加载指定的.jar或.class文件,在之后的代码中会使用到。[java] view plain cop

2016-03-04 09:52:06 550

转载 JAVA CAS原理深度分析

java.util.concurrent包完全建立在CAS之上的,没有CAS就不会有此包。可见CAS的重要性。 CASCAS:Compare and Swap, 翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。 本文先从CAS的应用说起,再深入原理解析。 CAS应用CAS有3个操作

2016-03-04 09:51:10 4598

转载 抽象工厂模式和工厂方法模式区别

首先来看看这两者的定义区别:工厂模式:定义一个用于创建对象的借口,让子类决定实例化哪一个类抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类       个人觉得这个区别在于产品,如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,

2016-03-04 09:48:57 14984 4

转载 网站大流量解决

基本思路是: 1.尽量减少无所谓得页面刷新。比如采用xmlhttp或者ajax等技术实现页面局部刷新。 2.大量使用缓存,其中缓存又可以分为三种,。Application   Cache   。Pre   Request   Cache   。Page   Cache,通过缓存可以大幅度得减少流量,增加web服务器得承载量。必要得时候,可以建立专门得缓存代理。 3.避免过多使用Sess

2016-03-04 09:47:55 928

转载 IntelliJ Idea 常用快捷键列表

Alt+回车 导入包,自动修正Ctrl+N   查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L  格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert 生成代码(如get,set方法,构造函数等)Ctrl+E或者Alt+Shift+C  最近更改的代码Ctrl+R 替换文本Ctrl+F 查找文本Ctrl+Shift+Spac

2016-03-04 09:47:01 434

转载 两种方法实现10进制和62进制互转

import java.util.Stack; public class Test { private static char[] charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray(); /** * 将10进制转化

2016-03-04 09:45:23 4694 1

转载 MYSQL分库分表总结

单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到。 单库多表 随着用户数量的增加,user表的数据量会越来越大,当数据量达到一定程度的时候对user表的查询会渐渐的变慢,从而影响整个DB的性能。如果使用mysql, 还有一个更严重的问题是,当需要添加一列的时候,mysql会锁表,期间所有

2016-03-04 09:43:31 1476

转载 AQS源码分析(超时、中断与其他)

中断JAVA中并没有好的中断线程的方式,早期引入的Thead.stop()和Thread.resume()容易导致死锁(参考:http://docs.oracle.com/javase/6/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html),已经不推荐使用。JAVA线程提供了协作式中断,何为协作是中断

2016-03-04 09:41:57 1243

转载 AQS源码分析(共享与互斥)

共享模式与独占模式AQL的内部队列采用的是CLH队列锁模型,CLH队列是由一个一个结点(Node)构成的。Node类中有两个常量SHARE和EXCLUSIVE,顾名思义这两个常量用于表示这个结点支持共享模式还是独占模式,共享模式指的是允许多个线程获取同一个锁而且可能获取成功,独占模式指的是一个锁如果被一个线程持有,其他线程必须等待。多个线程读取一个文件可以采用共享模式,而当有一个线程在写文

2016-03-04 09:40:52 819

转载 AQS源码分析(获取与释放)

同步状态AQS采用的是CLH队列,CLH队列是由一个一个结点构成的,前面提到结点中有一个状态位,这个状态位与线程状态密切相关,这个状态位(waitStatus)是一个32位的整型常量,它的取值如下:[java] view plain copy print?static final int CANCELLED =  1;  static

2016-03-04 09:39:36 617

转载 AQS简介

1、引言JAVA内置的锁(使用同步方法和同步块)一直以来备受关注,其优势是可以花最小的空间开销创建锁(因为每个JAVA对象或者类都可以作为锁使用)和最少的时间开销获得锁(单线程可以在最短时间内获得锁)。线程同步越来越多地被用在多处理器上,特别是在高并发的情况下,然而,JVM内置锁表现一般,而且不支持任何公平策略。从JAVA 5开始在java.util.concurrent包中引入了有别于S

2016-03-04 09:37:37 5786

转载 MCS队列锁

简介与CLH类似,MCS也是由QNode对象构成的链表,每个QNode表示一个锁持有者,表示一个线程要么已经获取锁,要么正在等待锁。它与CLH不同的是,队列是一个显示链表,是通过next指针串起来的。实现MCS队列锁的具体实现如下:1、如图(a)所示,队列初始化时没有结点,tail=null;2、如图(b)所示,线程A想要获取锁,于是将自

2016-03-04 09:36:24 1393

转载 CLH队列锁

NUMA与SMPSMP(Symmetric Multi-Processor),即对称多处理器结构,指服务器中多个CPU对称工作,每个CPU访问内存地址所需时间相同。其主要特征是共享,包含对CPU,内存,I/O等进行共享。SMP的优点是能够保证内存一致性,缺点是这些共享的资源很可能成为性能瓶颈,随着CPU数量的增加,每个CPU都要访问相同的内存资源,可能导致内存访问冲突,可能会导致CPU资源的浪

2016-03-04 09:35:42 524

转载 synchronized关键字

监视器java中同步是通过监视器模型来实现的,JAVA中的监视器实际是一个代码块,这段代码块同一时刻只允许被一个线程执行。线程要想执行这段代码块的唯一方式是获得监视器。监视器有两种同步方式:互斥与协作。多线程环境下线程之间如果需要共享数据,需要解决互斥访问数据的问题,监视器可以确保监视器上的数据在同一时刻只会有一个线程在访问。什么时候需要协作?比如:一个线程向缓冲区写数据,另一个线

2016-03-04 09:34:14 1028

转载 自旋锁、排队自旋锁、MCS锁、CLH锁

自旋锁(Spin lock)自旋锁是指当一个线程尝试获取某个锁时,如果该锁已被其他线程占用,就一直循环检测锁是否被释放,而不是进入线程挂起或睡眠状态。自旋锁适用于锁保护的临界区很小的情况,临界区很小的话,锁占用的时间就很短。简单的实现import java.util.concurrent.atomic.AtomicReference;public class Spi

2016-03-04 09:32:44 858

转载 Trie树

一:概念     下面我们有and,as,at,cn,com这些关键词,那么如何构建trie树呢?从上面的图中,我们或多或少的可以发现一些好玩的特性。      第一:根节点不包含字符,除根节点外的每一个子节点都包含一个字符。      第二:从根节点到某一节点,路径上经过的字符连接起来,就是该节点对应的字符串。      第三:每个单词的公共前缀作

2016-03-04 09:27:05 301

转载 伸展树

1:思想    伸展树的原理就是这样的一个”八二原则”,比如我要查询树中的“节点7”,如果我们是AVL的思路,每次都查询“节点7”,那么当这棵树中的节点越来越多的情况下就会呈现下旋,所以复杂度只会递增,伸展树的想法就是在第一次查询时树里面会经过一阵痉挛把“节点7”顶成“根节点”,操作类似AVL的双旋转,比如下图:当我们再次查询同样的”数字7“时,直接在根节点

2016-03-04 09:25:53 365

转载 Treap树

1:定义 1 #region Treap树节点 2 /// 3 /// Treap树 4 /// 5 /// 6 /// 7 public class TreapNode 8 { 9 /// 10 /// 节点元素11 /// 12

2016-03-04 09:24:12 307

转载 平衡二叉树

1:定义       父节点的左子树和右子树的高度之差不能大于1,也就是说不能高过1层,否则该树就失衡了,此时就要旋转节点,在编码时,我们可以记录当前节点的高度,比如空节点是-1,叶子节点是0,非叶子节点的height往根节点递增,比如在下图中我们认为树的高度为h=2。 1 #region 平衡二叉树节点 2 /// 3 /// 平衡二

2016-03-04 09:21:57 303

转载 二叉查找树

1:定义   查找树的定义非常简单,一句话就是左孩子比父节点小,右孩子比父节点大,还有一个特性就是”中序遍历“可以让结点有序。2:树节点为了具有通用性,我们定义成泛型模板,在每个结点中增加一个”数据附加域”。 1 /// 2 /// 二叉树节点 3 /// 4 /// 5 /// 6 publ

2016-03-04 09:18:06 311

原创 经典排序算法总结篇

首先回顾下各种排序的主要思路:一.       冒泡排序示例代码: public static void bubleSort(int[] a) { for (int i = 0; i < a.length; i++) { for (int j = i + 1; j < a.length; j++) { if (a[i] > a[j]) { i

2016-03-04 08:55:05 364

原创 SQL优化

SQL优化1、多用简单SQL2、少用子查询和复杂查询3、少用复杂join,并注意join驱动表是否最优4、where条件中不使用函数,避免无法使用索引5、注意类型隐式转换6、事务快速提交,不要频繁反复提交JOIN优化1、把结果集小的表作为驱动表,减少nested-loop循环次数2、优先优化nested-loop的内层循环效率3、保证被驱动表与驱动表

2016-03-03 18:20:29 424

原创 一致性哈希java实现

该client采用TreeMap存储所有节点,模拟一个环形的逻辑关系。在这个环中,节点之前是存在顺序关系的,所以TreeMap的key必须实现Comparator接口。 那节点是怎样放入这个环中的呢? Java代码   //对所有节点,生成nCopies个虚拟结点 for(Node node : nodes) { //每

2016-03-03 18:09:39 834

原创 CLH锁与MCS锁的比较

1、从代码实现来看,CLH比MCS要简单得多。2、从自旋的条件来看,CLH是在前驱节点的属性上自旋,而MCS是在本地属性变量上自旋3、从链表队列来看,CLH的队列是隐式的,CLHNode并不实际持有下一个节点;MCS的队列是物理存在的。4、CLH锁释放时只需要改变自己的属性,MCS锁释放则需要改变后继节点的属性

2016-03-03 18:08:28 1520

转载 PO VO DAO DTO BO TO概念与区别

O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写。通俗点讲,就是将对象与关系数据库绑定,用对象来表示关系数据。在O/R Mapping的世界里,有两个基本的也是重要的东东需要了解,即VO,PO。 它们的关系应该是相互独立的,一个VO可以只是PO的部分,也可以是多个PO构成,同样也可以等同于一个PO(指的是他们的属性)。这样,PO独立出

2016-03-03 17:35:57 497

空空如也

空空如也

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

TA关注的人

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