- 博客(170)
- 资源 (13)
- 收藏
- 关注
原创 多线程----Immutable VS Mutable (可变与不可变)
文章目录Immutable为什么String不可变?示例程序何时使用呢?实例创建后,状态不再发生变化时实例是共享的,且被频繁访问时哪些情况会破坏不可变性?扩展Immutable    Immutable是什么意思?不变的、不发生改变的意思。在JDK中有很多的类被设计成不可变的,举个大家经常用到的类java.lang.String,String类被设计成不...
2018-11-24 18:38:28 1487
原创 理解Redis的内存
Redis的所有的数据都是存在了内存中的,虽然现在内存越来越便宜,但是跟平时电脑上装的硬盘相比,硬盘的价格就是个渣渣。内存还是非常宝贵的,就拿我的一台腾讯云的服务器来说,目前是1核2G的,但是要想升级到4G,
2018-09-08 21:24:45 20019 5
原创 【JVM调优系列】----NewRatio与SurvivorRatio
-XX:NewRatio新生代(Eden + 2*S)与老年代(不包括永久区)的比值4 表示新生代 :老年代 = 1:4 ,意思是老年代占 4/5 -XX:SurvivorRatio2个Survivor区和Eden区的比值8 表示 两个Survivor : Eden = 2: 8 ,每个Survivor占 1/10 ...
2018-03-03 14:43:33 11893 1
原创 2018年新年计划
管理方面多些责任心,至少看五本以上的管理方面的书籍,并整理至少两篇管理方面的博客。记得有一句话是这么说的:如果想让领导心甘情愿的给你加薪,那么你就要做的比领导期望的要高一点。合理制定目标果断做出决策,并妥善处理问题懂得放权组建一个成功的团队能知人善任技术方面1、重构以及项目优化方面的知识《代码整洁之道》、《重构–改善既有代码的设计》《Java程序性能优化》 2、J
2018-01-31 21:19:00 2551 3
原创 【JVM调优系列】----CPU过高的分析与解决方案
问题描述 服务器是8核32G的,也就是说同时可用的共有8个CPU,一个CPU可以使用高达100%,8个CPU的话可以高达800%。前两天发现了一个CPU过高的问题,平时项目运行CPU也就是在10%,但是前两天发布之后突然发现CPU一直在200%左右打转,一直稳高不降。下面的例子只是参考(当时的情况没有截图o(╯□╰)o)。执行top命令查看占用CPU高的进程。top -
2017-11-19 14:28:04 11890 6
原创 性能调优(一)----Amdahl定律及木桶原理
什么是Amdahl定律? 首先的一个问题就是,这个怎么读啊???对于我这蹩脚的英语来说真是一脸懵逼。赶紧百度下:阿姆达尔定律,是由Gene Amdal 在1967年提出。阿姆达尔定律定义了穿行系统并行化后加速比的计算公式和理论上限。 加速比 = 优化前的系统耗时/优化后的系统耗时 加速比越高说明你的优化越明显。在这个地方还有另外一个公式: SpeedUp
2017-08-13 16:52:14 6780 1
原创 令仔学Redis(二)----单线程架构
Redis是一种基于键值对(key-value)的NoSQL数据库,包含多种数据结构。官网上给出的数字是读写性能可以达到10万/秒,可见速度之快。 做个简单的例子,同时开启5个redis客户端,同时执行下面的命令:incr number 每一条命令的执行过程都是一样的,发送命令,执行命令,返回结果。 如果是在多线程的情况下,不作任何处理很可能就会造成数据
2017-05-08 23:12:39 1795 2
原创 令仔代码收藏系列(二)----BASE64编码
package com.flight.inter.otaadapter.commons.util;import org.apache.commons.codec.binary.Base64;import java.io.UnsupportedEncodingException;public class Base64Util { /** * 将 strVal进行 BASE64 编码
2017-03-15 17:18:30 1107 1
原创 令仔代码收藏系列(一)----Java压缩与解压缩
package com.flight.inter.otaadapter.manage;import com.flight.inter.otaadapter.commons.util.Base64Util;import org.apache.http.Consts;import org.apache.http.HttpEntity;import org.apache.http.client.co
2017-03-15 17:14:33 1133 1
原创 Mybatis在Xml中处理大于号和小于号的方法
第一种,转义字符 在Mybatis配置Xml文件,严格地讲,在 XML 中仅有字符 “<”和”&” 是非法的。省略号、引号和大于号是合法的,但是把它们替换为实体引用是个好的习惯。 “<” 会产生错误,因为解析器会把该字符解释为新元素的开始。 “&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。 解决方法,用Xml转义符来替代: 转义符号
2017-03-08 15:11:34 3308 2
原创 令仔学MySql系列(一)----explain详解
explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。下面是一个例子: 然后咱们来说一说表格中每一列的具体含义。 id SELECT识别符。这是SELECT的查询序列号 select_type
2017-03-07 18:01:59 1289
原创 令仔学多线程系列(一)----同步工具类CountDownLatch
简单介绍 简单的介绍下CountDownLatch,是在jdk1.5被引入的,是在java.util.concurrent包下,它允许一个或者多个线程一直等待,直到其他线程的操作执行完后再执行。 CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程的数量,下面代码中的count就是初始时设置的线程数量。也就是闭锁需要等待的线程
2017-02-28 19:33:03 1116 6
原创 令仔学Redis(一)----浅析Redis存储数据时格式的设计
之前接触的一个业务,数据量的话现在在数据库中存了有将近400W的数据,在搜索的时候得到的这些数据会放入达到异步队列中,然后单独开一个线程来进行双写,写缓存,然后写数据库。Redis中的存储格式是Hash存储的,数据库的存储格式类似Hash,当时设计存储方式的时候是有些问题的,在Redis中存储的时候,数据库中有多少条数据,Redis中就会有多少个Key值。也就是说Redis中存储的一级Key有400
2017-02-22 20:31:53 6304 5
原创 策略模式和Spring的结合在项目中的应用
一、策略模式 策略模式的定义: 策略模式是对算法的封装,把使用算法的责任和算法本身分隔开,委派给不同的对象管理。策略模式通常把一系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。 二、解决了我的什么问题? 在实际的项目中,完成一项任务,可以有多种不同的方式,对于新手来说我们是怎么来用的,很
2017-01-27 09:55:54 14197 12
原创 新手学Linux(八)----MySql安装(Centos7)
最近项目新申请了云服务器,老大让我搭了下环境,在安装MySql的时候遇到的坑稍微多点,所以在这里做个记录,我的安装方式不是通过安装包来安装的,而是通过yum来安装的,这样倒是可以省去很多的事情,下面来说说具体的安装过程。 一、卸载原有mysql 因为现在mysql数据库在Linux上实在是太流行了,所以目前下载的主流Linux系统版本基本上都集成了mys
2017-01-08 16:56:44 1773 1
原创 令仔学多线程系列(二)----自定义Queue队列
之前做了一个新的需求,需要从每一次search请求返回中获取相关的数据,然后把这些获取到的数据做异步处理,写入缓存并同步到数据库中。如何做异步在这就想到了用队列的方式来实现,一开始是用的BlockingQueue,一遍从队尾push,另一边从队首取数据。 但是在这个地方用BlockingQueue的时候就会有点问题,首先是如果不给这个队列设置大小的话,时间长了很可能会吧内存给搞瘫了,但是如
2017-01-04 22:42:46 2873 1
原创 SpringMVC上传、解析Excel
示例:导入相关数据(Excel文件),相关的文件数据编辑好。XML文件配置 再spring的xml文件中配置要上传文件的大小<!-- 上传文件拦截,设置最大上传文件大小 10M=10*1024*1024(B)=10485760 bytes --> <bean id="multipartResolver" class="org.springframework.web.multipart.
2016-12-29 23:00:33 10770 4
原创 观察者模式和Spring的结合
这周给分了一个任务,就是对查询回来的数据进行各种各样的过滤,有七种不同的过滤条件。过滤条件是在数据库中存着的。在我们项目中有一个热发,就是定时的从数据库中把数据取出来进行分类保存到Property中或者Map中。所以一开始想的一个笨的方法就是把七种不同的过滤条件热发到七个不同的Map中去。然后再定义一个过滤的类,所有的查询回来的数据都要经过这个类的处理。 后来想了想,这样做的话,不利于扩展
2016-12-18 22:07:13 6109 3
原创 新手学Linux(七)----定时copy Tomcat日志
系统运行后,一些重要的数据是需要做好备份的,如果每天让一个人定时去备份tomcat下的日志,肯定会很麻烦的,服务器少了还好说,如果项目做大,服务器数量增加,难道要派很多人来定时的干这件事情么?肯定是不能这么干的。这样对于人力资源的利用太浪费了。那怎么办呢?我们把这件事情交给服务器自己办。
2016-11-13 18:18:47 1962 3
原创 【JVM调优】----内存溢出和内存泄漏
项目的开发,涉及到了服务器的运维,先来介绍下JVM相关的知识,也方便后期的使用。今天主要是说一说内存溢出和内存泄漏两件事。 内存溢出 从字面上来说,溢出,什么是溢出?就比如说你把一壶的水倒进一个小杯子里面,小杯子容量小,多出来的水就会溢出。就是你这个小杯子的容量撑不下你的一壶的水。用专业点的语言来说内存溢出,就是你申请内存容量的时候,系统无法给到你足够的内存容量大小,你申请了一个Inte
2016-11-05 17:32:01 3278 7
原创 SpringIOC--初始化源码解析
IOC容器的初始化过程步骤第一步Resource定位过程 在上一篇 Spring从入门到精通(一)—-IoC(控制反转) 中,详细的介绍了IOC的基本原理,本篇博客就不再赘述;这次主要是从源码的角度来给大家分享SpringIOC的初始化过程。深入的了解其原理。 SpringIOC容器的关键两个主要的容器系列: BeanFactory提供一些最基础的功能,我们以水桶为例,如
2016-08-20 19:36:44 1502 1
原创 OutOfMemoryError异常----Java堆溢出
Java堆溢出 在Java虚拟机规范的描述中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(下面都叫OOM)异常的肯能,下面就通过一些实例来验证异常发生的场景。 在下面举的例子中,在注释中会设定一些虚拟机的参数,在”VM Args”后边,如果你是用控制台命令来执行的程序,直接把这些参数放到Java命令之后就行,如果用的开发工具,Eclips
2016-08-08 15:21:03 1947 1
原创 Solr--全文索引原理
什么是全文搜索倒排索引结构正排索引倒排索引 在一些大型的门户网站和电商网站中,都有自己的站内搜索,但是使用传统的数据库查询方式已经无法满足一些高级的搜索要求,比如说:搜索速度要快、搜索结果要按照相关度排序,搜索的内容格式不固定,这些都需要使用全文实现搜索功能。 什么是全文搜索?信息检索 我们先要知道信息检索:从信息集合中找出与用户需求相关的信息,检索的信息包括:文本,图像,音
2016-08-06 21:12:47 3782 1
原创 【JVM调优(一)】----JAVA内存模型抽象结构
线程之间的通信机制有两种:共享内存和消息传递。 Java线程之间的通信由Java内存模型(JMM)控制,JMM控制一个线程对共享变量的写入什么时候对另一个线程可见。下图是JMM的抽象结构: 线程之间的共享变量存储在主内存中(Main Memory),每一个线程都有自己的本地内存(Local Memory),本地内存中存储着读/写共享变量的副本。 由上图可以看出,线程之间的通信
2016-08-04 09:37:20 4795 1
原创 集合详解(四)----HashSet和HashMap源码剖析(JDK1.7)
HashSetHashMapHashSet 当初始化一个HashSet的时候,HashSet的底层实现其实是HashMap:private transient HashMap<E,Object> map;public HashSet() { map = new HashMap<>();} 在每一个方法里面都是会通过map去调用HashMap的方法来实现。那么map是键
2016-07-31 17:25:52 3437 2
原创 Nginx反向代理
代理服务器什么是代理服务器代理服务器有什么好处反向 VS 正向正向代理Forward Proxy反向代理Reverse ProxyNginx反向代理服务器 代理服务器什么是代理服务器? 客户端访问数据的时候,不会直接与目标服务器进行连接,而是所有的请求都发送到代理(Proxy)服务器,然后代理服务器会去根据你的请求去访问相应的服务器,并最终返给你你想要的数据。 其
2016-07-30 17:05:10 2035 1
原创 Nginx虚拟主机配置
什么是虚拟主机Nginx实现虚拟主机的三种方式Nginx配置段基于域名基于IP基于端口什么是虚拟主机 什么是虚拟主机? 虚拟主机就是使用特殊的软硬件技术,把一台计算机主机分成多台“虚拟”的主机,每一台虚拟主机都具有独立的域名和IP地址(或共享的IP地址),具有完整的Internet服务器功能。在同一台硬件、同一个操作系统上,运行着为多个用户打开的
2016-07-30 13:38:59 1696 1
原创 新手学Linux(六)----安装Nginx
Nginx安装环境编译安装启动Nginx停止Nginx方式一快速停止方式二完整停止重启Nginx方式一先停止再启动方式二重新加载配置文件开机自启动Nginx编写shell脚本设置文件的访问权限加入到rclocal文件中Nginx安装环境 nginx是C语言开发,建议在linux上运行,本教程使用Centos7.0作为安装环境。gcc 安装nginx需要先将官网下载
2016-07-29 15:36:27 4788 1
原创 集合详解(三)----Map的两种遍历方式
第一种取值方式第二种取值方式 Map是以键值对(key-value)的方式来存取值的,那么该怎么把Map中的值取出来的,有两种方式,往下看。先定义一个Map,向里面存放一些数据。HashMap m=new HashMap();m.put("a","aa");m.put("b","bb");m.put("c","cc");m.put("d","dd"); 第一种取值方式
2016-07-27 17:25:51 1331 1
原创 集合详解(二)----ArrayList源代码剖析(JDK1.7)
ArrayList是List类的一个典型的实现,是基于数组实现的List类,因此,ArrayList封装了一个动态的、可变长度的Object[]数组。ArrayList是通过initialCapacity参数来设置数组长度的,当向ArrayList添加的数据超出了ArrayList的长度之后,initialCapacity会自动增加
2016-07-25 18:01:36 2211 2
原创 集合详解(一)----Collection和Map接口
在我们编程的时候,有时候需要集中存放多个数据,可以用数组来保存多个数据,但是数组的长度是不可变的,一旦数组的长度确定了之后就无法再改变,如果要保存可变长度的数据的话,数组肯定是不行的了。而且数组也无法保存具有一定关联的数据,比如:数学–80,英语–50。为了可以保存上面的这些信息,java提供了集合类,主要是负责保存、盛装数据
2016-07-25 11:07:32 6085 2
转载 深入理解HashMap(及hash函数的真正巧妙之处)
hashmap的数据结构hash算法hashmap的resizekey的hashcode与equals方法改写 原文地址:http://www.iteye.com/topic/539465 Hashmap是一种非常常用的、应用广泛的数据类型,最近研究到相关的内容,就正好复习一下。网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论。
2016-07-18 15:25:41 3268
原创 新手学Linux(五)----Linux下安装Redis
Redis是一个开源的,先进的 key-value 存储可用于构建高性能,可扩展的 Web 应用程序的解决方案。它支持存储的value类型很多,包括string,list,set,zset,hash。Redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中,它可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件。
2016-07-17 15:36:06 2303 1
原创 Mybatis深入了解(七)----延迟加载
resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。resultType无法实现延迟加载。 延迟加载:先从单表查询、需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快。
2016-07-17 12:52:11 2423 1
原创 Mybatis深入了解(六)----关联查询(高级映射)
一对一查询resultTyperesultMap一对多查询resultTyperesultMap多对多查询一对一查询resultType resultType:使用resultType实现非常简单,如果POJO中没有包括查询的列名,可以新建扩展类继承父类,并在子类中添加列名对应的属性,即可完成映射。package cn.itcast.ssm.po;/** * 订单的扩展类 *
2016-07-16 21:15:08 4332
原创 Mybatis深入了解(五)----动态SQL
什么是动态SQL 实例Mapperxml测试代码sql片段定义sql片段引用sql片段foreach应用场景在输入参数类型中添加List ids传入多个id修改Mapperxml测试代码什么是动态SQL? 动态sql是mybatis的核心,主要是对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活的拼接、组装。 实例 用户信息综合查询列表和用户
2016-07-16 16:29:43 2439 1
原创 Mybatis深入了解(四)----输入输出映射
通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、POJO的包装类型。举个栗子:完成用户信息的综合查询,需要传入条件很复杂(可能包括用户信息、其他信息,比如商品、订单)。传递POJO的包装类对象,看下面的实例:
2016-07-16 15:17:13 1240
原创 Mybaits深入了解(三)----mybatis开发Dao的方法
程序员写代码的时候,需要写dao接口和dao实现类。而且还需要向dao实现类中注入SqlSessionFactory,在方法体内通过SqlSessionFactory创建SqlSession。下面举个栗子:
2016-07-11 23:49:10 1783
原创 Mybaits深入了解(二)—-入门实例
Mybatis CRUD实例实例的开发环境 java环境 开发工具 数据库 jdk1.7 myeclipse mysql 项目的目录结构log4j.properties配置 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进
2016-07-01 20:57:50 1172
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人