- 博客(59)
- 收藏
- 关注

原创 JVM内存模型来解释多线程并发常见问题和volilate,final,ThreadLocal
多核CPU运行时,每个CPU都会有自己的Cache,同样jvm运行时,每个线程的私有栈在使用共享数据时,都会现将共享数据拷贝进栈顶进行运算,这份数据其实是副本,因此也同样存在多个线程修改一个内存单元的一致性问题。JVM有自己的一套内存模型(Java memory model,JMM)。JDK1.2开始有,JDK1.5(JSR-133)才逐渐成熟。JMM中将JVM内存分为“主存”和“工作内存”。
2016-04-08 11:35:17
2609

原创 JAVA通信的三种I/O模型
BIO(阻塞IO),也就是传统的IO,在进行数据读取时,在数据准备好之前,线程一直挂起,而数据从准备好,需经过硬盘,OS内核(Kernel),JVM,这时一个漫长的过程,但是每一个SOCKET连接,都需要一个线程来监听,对于传输小数据的短连接问题还不大,如果是传输大数据的长连接,那就会有大量线程在系统中,非常浪费内存。java1.4版本出现 NIO(New IO),非阻塞型IO,由SocketCh
2016-04-06 15:36:13
1078

原创 jvm内存划分与GC工作机制
heap堆里的minor GC和full gc 在不断创建对象过程中Eden区会满,然后开始Young GC(minor GC),Young 空间第一次GC就是在Eden区找”活着的对象“,将这些对象拷贝到S0或S1其中一个区域,然后将Eden清空。第一次如果选了S0,第二次就会把Eden和S0里活着的对象拷贝到S1,然后开始Eden和S0清空。第三次就是将Eden和S1里活着的对象拷贝到S0
2016-04-05 17:07:37
452

原创 字节码增强和AOP
字节码增强技术:AOP技术其实就是字节码增强技术,JVM提供的动态代理追根究底也是字节码增强技术。 应用场景:某一天系统出现OOM,通过工具分析,是莫各类的对象占用了很大空间,但是这个对象被许多程序访问,那么就很难找到,工程的全文匹配也只能找到自己的业务代码调用的地方,深入的反射,三方包调用无法匹配。这个时候AOP就可以帮助完成。 两种实现机制:一种是通过创建原始类的一个子类,也就是动
2016-04-05 14:58:57
4003
原创 CAS机制
CAS,Compare and Swap, 翻译成比较并交换:有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做。 现代的CPU提供了特殊的指令,可以自动更新共享数据,而且能够检测到其他线程的干扰,而 compareAndSet() 就用这些代替了锁定。 拿出AtomicInteger来研究在没有锁的情况下是如何做到数据正确
2016-04-20 15:43:31
571
原创 集合
java集合架构支持3种类型的集合:规则集(Set),线性表(List),和图(Map),分别定义在Set,List,Map中。Set实例存储一组互不相同的元素(集合),List实例存储一组顺序排列的元素(表),Map存储一组 对象—关键值的映射总的架构如下,非常重要,包含继承关系,实现的分类,一目了然:Collection接口: Set接口: HashSet具体
2016-04-19 14:55:45
419
原创 乐观锁和悲观锁
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人
2016-04-14 16:57:36
542
1
转载 基于nginx tomcat redis分布式web应用的session共享配置
一、前言nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存、web server负载均衡等功能,由于其轻量级、高性能、高可靠等特点在互联网项目中有着非常普遍的应用,相关概念网上有丰富的介绍。分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,比如 tomcat cluster session 广播、ng
2016-04-14 15:51:43
541
原创 java深拷贝和浅拷贝
因为每个类直接或间接的父类都是Object,因此它们都含有clone()方法,但是因为该方法是protected,所以都不能在类外进行访问。要想对一个对象进行复制,就需要对clone方法覆盖。 一般步骤是(浅复制):被复制的类需要实现Clonenable接口(不实现的话在调用clone方法会抛出CloneNotSupportedException异常) 该接口为标记接口(不含任何方法)覆盖clo
2016-04-14 14:43:09
431
原创 线程基础
线程和进程的区别:线程是进程的执行单位,多线程之间可以共享一个进程资源,线程占用过多资源会使整个进程宕机,由于资源共享,现场之间会互相影响,进程之间通常不会。线程的的创建,都要通过java.lang.Thread类的start()方法,通常可以通过继承并扩展Thread原本的run()方法,或者实现Runnable接口的任务实体作为参数传入,线程是的启动是在调用Thread.start()时,这个
2016-04-07 11:12:54
355
原创 JAVA和计算机原理
计算机由CPU,DDR缓存,内存,硬盘组成。计算机的工作原理与编程语言的原理都是相通的。线程是进程(如JVM就是一个进程)的单位,进程间相互独立,进程可申请系统资源,同一进程的各线程间共享资源。某进程内的线程在其它进程不可见。目前CPU的基本单位是线程,JAVA也是基于多线程模式,当JAVA程序运行中一个线程使用资源过大,可能导致整个JVM进程挂掉,这种情况在多进程模型中不会发生,因为多进程模型
2016-03-30 16:01:48
723
原创 数字游戏和JAVA的一些坑
面试题,如何不用临时变量,让整型变量A和B的值互换。 一般有两种方式: 第一种用数据叠加后减回来 A=A+B; B=A-B; A=A-B; 第二中是异或运算,异或运算是按照二进制进行“异或”的,对于A.B两个数字,如果某个二进制位上都是0,或都是1,则返回0,不同返回1,这样得到一个新的数字,当这个数字在与A异或,就可以得到B,技巧是二进制位上的一个加法单不进
2016-03-29 17:38:32
517
原创 一些简单的算法
入门算法冒泡排序时间复杂度o(n²),空间复杂度o(1),最差的排序。快速排序,快速排序(Quicksort)是对冒泡排序的一种改进,排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想—-分治法也确实实用,方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.
2016-03-29 11:41:23
5673
原创 从jvm编译优化角度解读String的赋值比较
下面是String对象赋值比较的例子:public class StringTest { static String a = "a"; static String b = "b"; static final String c = "a"; static String d = "a"+"b"; static String e = a+"b"; stat
2016-03-28 16:27:10
1180
转载 Interceptor 拦截器 与 <mvc:annotation-driven />的冲突
最近在学习拦截器,没想到刚开始就碰到难题了。我明明配置好了拦截器,但是丝毫没有起作用,百思不得其解。这是起初的配置:?1234567891011121314151617181920
2016-03-25 17:21:32
3594
原创 IOC
接口:接口即声明,声明了那些方法是对外公开提供的,JAVA8中接口可以有方法体面向接口编程:结构设计中,分清楚层次及调用关系,每层只向外提供一组功能接口,各层间仅依赖接口而非实现类IOC在:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护DI依赖注入:是其一种实现方式Spring的注入方式1.设置注入
2016-03-14 09:55:01
316
原创 spring
spring 是一个开源框架,为解决企业应用开发的复杂性而创建的,现在已经不止应用于企业应用是一个轻量级的控制反转IOC和面向切面AOP 的容器框架从大小与开销两方面而言Spring都是轻量的通过控制反转的技术达到松耦合目的提供面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性开发包含并管理应用对象的配置和生命周期,这个意义上是一种容器将简单的组建配置
2016-03-14 09:44:29
337
原创 工厂模式
1.什么情况下适合工厂模式有一组类似的对象需要创建在编码时不能预见需要创建哪种类的实例系统需要考虑扩展性,不依赖于产品实例如何被创建组合和表达的细节2.工厂模式的动机在软件系统中经常面临着对象的创建工作,由于需求的变化,这个对象可能随之也会变化,但它拥有比较文档的接口为此,我们需要提供一种封装机制来隔离这个易变对象的创建,保持系统中其他依赖该对象的对象不随着它变化而受影
2016-03-11 17:27:49
341
原创 springMvc
拦截器和过滤器的区别1.过滤器Filter依赖于Servlet容器,基于回调函数2.拦截器Interceptor依赖于框架容器,基于反射机制springMVC图示:mvc的核心思想是业务数据抽取同业务数据呈现相分离,程序分层,分工合作,相互独立又协同工作
2016-03-09 17:05:48
342
原创 mongodb入门
数据库分类1.sql数据库:支持sql语言的数据库,oracle,mysql等。2.nosql数据库,不支持sql语言的数据库,redis,mongodbmongodb特点1无数据结构限制 没有表结构概念,每条记录可以有不同的结构 业务开发方便sql数据库需要事先定义表结构再使用如图所示2完全的索引支持redis只支持key-
2016-03-03 14:37:08
352
原创 Web压力测试工具Siege
Siege是我所用过的一款不错的网站压力测试工具,它可以非常容易地定制并发访问人数以及并发时间,安装、使用也非常方便,当然它是在Linux环境下使用的 官方网址:http://www.joedog.org/安装解压:tar -zxvf siege-2.70.tar.gz,进入到解压后的目录:siege-2.70,运行命令:./configuremakemake
2015-12-16 15:27:43
468
原创 centos 开启防火墙
一、检查iptables服务状态首先检查iptables服务的状态[root@woxplife ~]# service iptables statusiptables: Firewall is not running.说明iptables服务是有安装的,但是没有启动服务。如果没有安装的话可以直接yum安装yum install -y iptables
2015-12-15 17:56:09
469
原创 nginx优化
最近在服务器上搞了一些nginx 研究了一下 总结总结nginx配置文件里面需要注意的一些参数worker_processes 8nginx要开启的进程数 一般等于cpu的总核数 其实一般情况下开4个或8个就可 我开2个以了 多了没有太多用每个nginx进程消耗的内存10兆的模样worker_cpu_affinity仅适用于linux,使用该选项可以
2015-11-10 21:40:10
350
原创 服务器知识
1.带宽计算网站的服务器带宽,是根据实际情况分析才可以的网络带宽计算公式是统一的:1M带宽是指比特,并不是平时所说的字节.比特(bit)是内存中的最小单位,也称“位”、它只有两个状态分别以1和0表示。我们将8个连续的比特叫做一个字节(byte)。比特率就是数据传输的速率. 它们的关系: 千比特,就是Kbit,它和KB是不一样的,KB是千字
2015-10-28 14:27:25
484
原创 centos添加普通用户,操作权限设置
添加用户 useradd 用户名设置密码 passwd 用户名然后输入 两次密码即可。如何改变文件属性与权限1.chgrp,改变文件所属用户组;chown,改变文件所有者;chmod,改变文件的权限。 chmod -R 777 /data/project/ 设置project下所有文件的权限2.chgrp就是change group的简称,使用该指令时,要被改变的组名必须在/etc
2015-09-07 15:10:05
15535
转载 centos服务器安全设置
8、更改SSH端口,最好改为10000以上,别人扫描到端口的机率也会下降不允许使用低版本的SSH协议vi /etc/ssh/sshd_config将#protocol 2,1改为protocol 2(注:centos 6下已默认取消了低版本协议)将PORT改为1000以上端口vi /etc/ssh/sshd_configPort 10000同时,创建
2015-09-06 23:43:42
548
原创 linux服务器常用部署命令
1. nginxps -ef | grep nginx在进程列表里 面找master进程,它的编号就是主进程号了。步骤2:发送信号从容停止Nginx:kill -QUIT 主进程号, 快速停止Nginx:kill -TERM 主进程号,快速停止Nginx: kill -QUIT 主进程号平滑重启:/usr/nginx/sbin/nginx -s reload
2015-09-06 16:52:24
454
原创 centos nginx和svn开机自启动
centos开机自动启动SVN服务的方法1、编辑rc.local文件 vi /etc/rc.d/rc.local2、加入如下启动命令 /usr/bin/svnserve -d -r /var/svn/注意: 我们在用终端操作的时候,可以直接使用以下命令启动SVN: svnserve -d -r /home/svn 但是在/etc/rc.d/r
2015-09-06 16:30:24
911
原创 linux(centos)搭建SVN服务器
安装步骤如下:1、yum install subversion2、输入rpm -ql subversion查看安装位置,如下图: 我们知道svn在bin目录下生成了几个二进制文件。输入 svn --help可以查看svn的使用方法,如下图。3、创建svn版本库目录mkdir -p /var/svn/
2015-09-06 13:31:25
599
1
原创 CentOS 系统各个目录的作用详解
一、前 言接触Linux也有一段时间了,不过这几天在编译开源程序时,才发现自己对linux文件系统的目录结构了解的不够透彻,很多重要目录都说不清楚是用来干嘛的,于是在网上百度了一下这方面的介绍,根据自己的使用习惯,整理出来一篇关于Linux文件系统的目录结构的文章,和大家一起分享。文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录
2015-09-06 10:16:13
1162
原创 centos设置静态IP后不能范文外网
现象:ping内网正常ping外网IP,域名均无法正常,返回错误:connect: Network is unreachable后面在无意中看到Linux网络配置有添加网关的命令:复制代码代码如下:route add default gw 192.168.128.2 dev eth0 按上面操作,添加了默认的网关之后。再次
2015-09-06 09:27:48
1348
原创 centos时间同步
采用crontab的方法如下:#检查dns是否设置cat /etc/resolv.conf#如果未设置,在文件尾部添加dns,示例nameserver 192.168.0.1#设置每天1点0分执行vi /etc/crontab0 1 * * * ntpdate clock.redhat.com > /dev/null 2>&1
2015-09-05 16:09:05
460
转载 升级gcc
http://www.cnblogs.com/peterpanzsy/archive/2013/04/10/3006838.html今天又搞了一天,升级成功的那一刻,我都快感动得哭了。。。什么都不说了,都是泪。。。其实升级不难,真的一点都不难,重点是被自己人的文档坑了。。系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8参考:http:
2015-09-04 21:35:30
500
转载 centos安装nginx
nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息。正式开始前,编译环境gcc g++ 开发库之类的需要提前装好,这里默认你已经装好。ububtu平台编译环境可以使用以下指令apt-get install build-essentialapt-get install libtoolcentos平台编译环境使用如下
2015-09-04 21:29:21
425
转载 CentOS 5.5下安装MySQL 5.5全过程分享
安装环境:Linux服务器CentOS 5.5安装版本:mysql-5.5.8.tar.gz1、安装 cmake 编译器。1)、下载cmake#cd /usr/local/src#wget http://www.cmake.org/files/v2.8/cmake-2.8.4.tar.gz2)、解压cmake#tar -zvxf cmake-
2015-09-04 21:10:10
697
转载 CentOS安装JAVA
一般情况下,我们都要将linux自带的OPENJDK卸载掉,然后安装SUN的JDK。 首先查看Linux自带的JDK是否已安装。输入如下命令,查看已经安装的JAVA版本信息。 Linux代码 java -version 输入如下命令,查看JDK的信息。Linux代码 rpm -qa|grep java 如
2015-09-03 11:57:29
416
转载 CentOS下SVN安装及配置图解教程
svn服务器有2种运行方式1.独立服务器 (例如:svn://xxx.com/xxx);2.借助apache。(例如:http://svn.xxx.com/xxx);为了不依赖apache,选择第一种方式-独立的svn服务器。svn存储版本数据也有2种方式:1.bdb;2.fsfs。因为BDB方式在服务器中断时,有可能锁住数据(搞ldap时就深受其害,没法根治),所
2015-09-03 07:58:06
939
转载 Tomcat在Linux上的安装与配置
以下使用的Linux版本为: Redhat Enterprise Linux 7.0 x86_64,Tomcat版本为tomcat-7.0.54.1.下载JDK与Tomcat. jdk下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
2015-08-31 15:24:07
392
转载 Linux(Centos6.5)下安装svn服务器,并通过http访问
inux安装svn其实很容易,个人觉得难就难在配置上,反复配置,琢磨,查找相关资料,总算是成功了。。安装:安装svn,一般情况下,选择yum方式安装还是比较简单的。?12[root@moshi ~]# yum -y install mod_dav_svn#会自动安装mod_dav_svn
2015-08-31 15:13:34
1295
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人