自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个码农的博客

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

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

原创 深入理解内部类

1.为什么成员内部类可以无条件访问外部类的成员?  下面通过反编译字节码文件看看究竟。事实上,编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面是Outter.java的代码:public class Outter { private Inner inner = null; public Outter() { }

2016-09-29 11:19:40 3222

转载 linux常见命令

Linux 命令一级篇基本命令:1 vi 编辑器――――――――――熟练程度:*****功能:生成新文件或者编辑查看文件格式: vi   file_name 说明:上面的命令直接进入vi的命令模式从命令模式进入编辑模式需要按i键或者a键,使用ESC键可以从编辑模式进入命令模式,1.1   编辑模式可执行的操作:插入各种文本信息

2016-06-14 15:04:19 1436

转载 jsonp实现跨域访问

前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来。抱着有问题必须解决的态度,我看了许多资料,原来如此。。。为何一直知道jsonp,但一直迷迷糊糊的不明白呢?——网上那些介绍资料都写的太复杂了!我是能多简单就多简单,争取让你十分钟看完!1. 同源策略ajax之所以需要“跨域”,罪魁祸首就是浏览器的同源策略。即,一个页面的a

2016-06-14 14:32:44 1892 1

原创 zookeeper基本api介绍和使用

准备工作拷贝ZooKeeper安装目录下的zookeeper.x.x.x.jar文件到项目的classpath路径下.创建连接和回调接口首先需要创建ZooKeeper对象, 后续的一切操作都是基于该对象进行的.Java代码  ZooKeeper(String connectString, int sessionTimeout, Watcher w

2016-06-03 11:51:25 12475

转载 从零开始写一个框架的详细步骤

定位所谓定位就是回答几个问题,我出于什么目的要写一个框架,我的这个框架是干什么的,有什么特性适用于什么场景,我的这个框架的用户对象是谁,他们会怎么使用,框架由谁维护将来怎么发展等等。如果你打算写框架,那么肯定心里已经有一个初步的定位,比如它是一个缓存框架、Web MVC框架、IOC框架、ORM/数据访问框架、RPC框架或是一个用于Web开发的全栈式框架。是 否要重复造轮子?除非是练

2016-05-31 17:28:27 44675 4

转载 SpringMVC、Zookeeper、Dubbo使用

联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的。现在核心业务抽取出来,作为独立的服务,使前端应用能更快速和稳定的响应。 第一:介绍Dubbo背景     大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配

2016-05-31 17:26:50 2056

转载 常用负载均衡算法

均衡算法主要解决将请求如何发送给后端服务。经常会用到以下四种算法:随机(random)、轮训(round-robin)、一致哈希(consistent-hash)和主备(master-slave)。 比如:我们配置nginx的时候,经常会用到这样的配置:upstream simplemain.com {     ip_hash;     server  19

2016-05-31 17:17:06 6000

转载 程序员的“非程序员”之路

本文转载自网络摘要20多年前我就开始写代码,很喜欢写代码,直到现在为止仍然热度不减!人生总是会和你开点小玩笑,我在多年之前走上了”非程序员“之路。我觉得无论你将来是否继续走技术路线,你的程序员经历将为你打下雄厚的基础。本文为你分享我的一些心得,为你分享一些程序员也应该掌握的”非程序员“技能,希望对你有帮助。什么是”非程序员“?什么

2016-04-13 15:53:24 758

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

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

2016-03-09 18:25:55 1343

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

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

2016-03-09 18:23:58 893

原创 Java 征途:行者的地图

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

2016-03-08 08:23:25 861

转载 IT人员应该怎么跳槽

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

2016-03-08 08:21:41 6820

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

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

2016-03-08 08:19:28 2056

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

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

2016-03-04 10:27:06 762

转载 8张图带你理解Java

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

2016-03-04 10:20:05 1249

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

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

2016-03-04 10:18:16 458

转载 开发必会的 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 1007

转载 20 个 Linux 命令面试问答

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

2016-03-04 10:07:57 413

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

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

2016-03-04 10:05:08 349

转载 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 458

转载 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 297

转载 简述java内存模型

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

2016-03-04 09:59:40 3687

转载 ClassPool介绍

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

2016-03-04 09:53:35 1401

转载 Javassist简单应用小结

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

2016-03-04 09:52:06 540

转载 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 4564

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

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

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

转载 网站大流量解决

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

2016-03-04 09:47:55 912

转载 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 415

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

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

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

转载 MYSQL分库分表总结

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

2016-03-04 09:43:31 1463

转载 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 1227

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

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

2016-03-04 09:40:52 807

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

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

2016-03-04 09:39:36 600

转载 AQS简介

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

2016-03-04 09:37:37 5775

转载 MCS队列锁

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

2016-03-04 09:36:24 1378

转载 CLH队列锁

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

2016-03-04 09:35:42 515

转载 synchronized关键字

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

2016-03-04 09:34:14 1011

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

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

2016-03-04 09:32:44 846

转载 Trie树

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

2016-03-04 09:27:05 290

转载 伸展树

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

2016-03-04 09:25:53 350

空空如也

空空如也

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

TA关注的人

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