- 博客(47)
- 收藏
- 关注
转载 ThreadLocal类
原博客文章:https://www.cnblogs.com/zhangjk1993/archive/2017/03/29/6641745.html线程局部变量在多线程环境下,之所以会有并发问题,就是因为不同的线程会同时访问同一个共享变量,例如下面的形式public class MultiThreadDemo { public static class Number { p...
2018-03-03 10:16:03 231
转载 多线程死锁及预防
原博文地址:http://blog.csdn.net/ls5718/article/details/51896159一、死锁的定义多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。下面我们通过一些实例来说明死锁现象。先看生活中的一个实例,2个人一...
2018-03-02 20:08:13 233
原创 Session和Cookie
Http协议是一个无状态协议,即下一次访问并不知道上一次访问的情况,访问完后便断开连接。为了可以跟踪会话,通常使用SessionId来识别用户。程序初始化时,服务器通过Response把SessionId返回给客户端,而客户端则把它用Cookie存放起来。接下来每次访问该网站的时候都会带着这个SessionId访问,后台根据SessionId便可以知道用户的状态,而一旦浏览器被关闭,该Cookie
2018-01-26 09:44:35 248
原创 Jackson
ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。 ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。 writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。 writeValue(Outpu
2018-01-23 14:33:08 196
原创 海量数据的处理
对于一些处理数据类型的问题,可以利用Bit-map和双层桶法进行处理。例:2.5亿个int数据中找出不重复的正整数的个数。(正整数的表示范围为:0-2^32-1)我们可以使用Bit-map位图法来处理此类问题。使用2bit表示一个正整数出现0次、1次还是两次及以上,差不多占用512M内存。如果内存使用过大,可以采用双层桶法,将这2^32-1个数划分为2^8个区域(比如一个文件就是一个区域)
2017-09-02 08:56:10 228
原创 Java注解
Annotation接口是所有注解(接口)的父接口,可以为程序元素(类、方法、成员变量)设置元数据。注解的具体实现类是Java运行时生成的动态代理类。代理类调用注解的方法时,会最终调用AnnotationInvocationHandler的invoke()方法(AnnotationInvocationHandler是InvocationHandler接口的具体实现类)。该方法可以从Java常量池的
2017-08-30 20:47:51 224
原创 Tomcat
一、Tomcat的顶层结构Tomcat中最顶层的容器叫Server,代表整个服务器,Server中至少包含一个Service,用于具体提供服务。Service主要包含两部分:Connector和Container。Connector用于处理连接相关的事情,并提供Socket与request、response的转换。Containner用于封装和管理Servlet,以及具体处理request请求
2017-08-29 18:52:13 275
原创 Hadoop
Hadoop是Apache开源组织的一个分布式计算开源框架,实现在大量计算机组成的集群中对海量计算机进行分布式计算。Hadoop框架中最核心的设计是HDFS和MapReduce,HDFS实现存储,MapReduce实现原理分析处理。一、HDFSHDFS(Hadoop分布式文件系统),可以提供高吞吐量的数据访问,适合那些有超大数据集的应用程序。HDFS的设计特点:1、大数据文件,
2017-08-24 20:17:57 307
原创 Redis
Redis数据类型 Redis中保存的数据都是键值对,键类型都是String,值类型有字符串、列表、hash表、集合、有序集合、HyperLogLog。一、字符串类型 Redis字符串是二进制安全的,因此Redis字符串可以包含任何种类的数据,例如一个JPEG图像等,一个字符串最多可以包含512M内容。1、set命令:将字符串键 key 的值设置为 valu
2017-08-22 09:58:34 287
原创 MySQL数据库文件
一、参数文件 MySQL实例启动时,数据库会先读一个配置参数文件,用来寻找数据库的各个文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等,分为两类:动态参数和静态参数。静态参数在整个实例生命周期内不得进行更改,动态参数可以通过SET命令基于session/global修改。二、日志文件1、错误日志 通过查看该文件定位数据库存在的问题,
2017-08-21 19:41:02 252
原创 InnoDB存储引擎
1、缓冲池 InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。基于磁盘的数据库系统使用缓冲池技术来提高数据库整体性能。缓冲池就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。数据库读取页时,首先将从磁盘读到的页存放在缓冲池中;数据库修改页时,首先修改缓冲池的页,再以一定的频率刷新到磁盘上。2、内存管理 数据库中的缓冲池是
2017-08-21 14:17:29 291
原创 图论算法
1、图的表示方法邻接表表示法13 private class Vertex{14 private String vertexLabel;// 顶点标识15 private List adjEdges;16 private int inDegree;// 该顶点的入度17 18 public Vertex(
2017-08-20 16:45:01 510
原创 AQS源码分析
参考博文:http://blog.csdn.net/vernonzheng/article/details/8275624 http://www.importnew.com/24006.html AQS就是java.util.concurrent.locks.AbstractQueuedSynchronizer这个类,是juc包
2017-08-19 20:12:16 287
原创 MySQL数据库字段加密
在windows系统上,常用以下字段加密:1、单向加密PASSWORD(string)函数:加密不可逆转,转换成164位,如111111->*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9MD5(string)函数:加密不可逆转,转换成128位,如111111->96e79218965eb72c92a549dd5a3301122、双向加密
2017-08-17 12:55:45 920
原创 多线程
一、线程的创建1、继承Thread类创建线程2、实现Runnable接口创建线程,一般使用匿名内部类 Thread thread=new Thread(new Runnable(){ public void run(){ 方法体 } })3、使用Callable
2017-08-14 22:23:47 257
原创 IO流
一、阻塞式输入/输出输入流:InputStream/Reader->字节输入流/字符输入流输出流:OutputStream/Writer->字节输出流/字符输出流转换流:InputStreamReader/OutStreamWriter->字节转换为字符流缓冲流:BufferedInputStream/BufferedOutputStream、BufferedReader/Buff
2017-08-14 15:59:35 236
原创 list集合与queue集合
1、List集合的特点元素是有序的,元素可以重复,因为该集合体系有索引List体系下ListIterator()具有向前迭代的功能。在迭代时不能通过集合对象的方法操作集合中的元素,因为会发生异常。2、实现类ArrayList和Vector作为List类的两个典型实现,完全支持之前介绍的List接口的全部功能。ArrayList和Vector类都是基于数组实现的List类,所
2017-08-13 20:42:00 5604
原创 Java基础
面向对象三大特征一、封装通过使用访问控制符1、将对象的的成员变量和实现细节隐藏起来,不允许外部直接访问。2、把方法暴露出来,让方法来控制对这些成员变量进行安全的访问和操作。二、继承Java的继承是单继承,通过继承来实现对父类的扩展。三、多态同样的事物在不同情况下表现出不同的状态。具体到Java,就是相同类型的变量、调用同一个方法时呈现出多种不同的行为
2017-08-13 18:24:52 199
原创 设计模式
Java设计模式的六大原则:1、开闭原则:对扩展开放,对修改关闭。程序在扩展功能的时候,不能修改原有代码,实现一种热插拔效果。查看更多2、里氏代换原则:任何基类出现的地方,子类一定可以出现。即子类可以扩展父类的功能,但不能修改父类的功能。查看更多3、依赖倒转原则:核心思想是面向接口编程,依赖于抽象而不依赖于具体。查看更多4、接口隔离原则:使用多个隔离的接口,比使用单个接口要好。防止实现不必要的方法...
2017-08-13 13:13:08 200
原创 Java8新特性
一、函数式接口只定义一个抽象方法的接口称为函数式接口。可以使用@FunctionalInterface进行声明。Java.lang.Runnable是一个函数式接口二、Lambda表达式使用Lambda表达式来实例化函数式接口,用法是1、(形参列表) 2、-----〉 3、(方法体)三、接口的增强1、允许定义默认的方法,用default修饰,默认方法不能重载Ob
2017-08-13 09:23:09 186
原创 JVM优化
JVM调优时,常用的参数:1、-Xms:最小堆值 -Xmx:最大堆值 (两个参数设置为一样可避免堆自动扩展);2、-XX:+HeapDumpOnOutOfMemoryError:让虚拟机在出现内存溢出异常时Dump出当前的内存堆转存快照; -XX:+PrintGCDetials:打印内存回收日志,在进程退出时输出当前内存各区域分配情况;3、-Xss:栈内存容量;
2017-08-11 15:45:14 254
原创 集群间session共享
一、tomcat自带的复制功能tomcat的session复制分为两种, 一种是全局试的(all-to-all), 这意味着一个node(tomcat实例)的session发生变化之后, 它会将这些变更复制到其他所有集群组的成员;另一种是局部试的, 它会用到BackupManager, BackupManager能实现只复制给一个Buckup Node, 并且这个Node会部署相同的Web
2017-08-11 12:03:06 230
原创 Object类与reflect包
一、类Object是类层次结构的根类。主要包括如下方法:1、clone():创建并返回该对象的副本。2、equals(Object obj):两个引用变量指向的是同一个对象,一般要重写。3、getClass():返回该对象的运行时类。4、hashCode():返回哈什值。5、toString():返回该对象的字符串表示。Java反射机制可以提供如下功能:1、在运
2017-08-09 17:20:21 283
原创 Servlet
一、servlet(这里主要指HttpServlet)生命周期只有两种状态:未创建状态与初始化状态。这两种状态转换主要靠3个方法来进行控制:init() ,service(),destory().init():此方法会接受到一个servletConfig类型的参数,根据此参数可以获得servlet的一些信息,从而初始化servlet.service():用于处理客户端传来的请求,根据HTT
2017-08-02 08:38:27 303
原创 Spring事务属性
事务属性包括:传播行为、隔离级别、回滚规则、只读和超时。除了传播行为,其他属性都是Spring借助底层资源实现,而传播行为是Spring借助自身功能实现的。一、传播行为:在开始事务之前,一个事务上下文已经存在,此时有若干选项可指定一个事务性方法的执行行为。TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一...
2017-07-31 22:33:31 225
原创 Spring AOP
一、AOP术语AOP(面向切面编程)技术是OOP(面向对象编程)技术的补充,OOP无法解决分散组件调用公共业务的解耦问题。利用AOP,将分布在多个组件中的公共业务模块化,并把它们声明式地应用在需要它们的地方,使得那些组件可以更加专注于自身核心业务。1、切面切点和通知的结合体,定义通知应该应用到哪些切入点上。2、连接点应用执行过程中可以插入切面的点。3、切点定义了切面何处
2017-07-31 22:01:17 193
原创 Spring IOC与依赖注入
Spring IOC的思想:当某个Java实例调用另一个Java实例时,传统的程序设计,通常由调用者来创建被调用者的实例。但是在控制反转/依赖注入模式下,被调用者实例的创建由Spring IOC 容器来创建,然后注入调用者。Spring IOC容器创建实例时,使用了反射机制,即利用Class的forName()方法获取对应的Class对象,这种方式需要传入类的全限定名,因此在xml文件中需要通过c
2017-07-31 13:08:44 240
原创 spring容器以及Spring启动过程
一、Spring容器spring容器最基本的接口就是BeanFactory,负责配置、创建、管理Bean及其之间的依赖关系,ApplicationContext是其子接口。BeanFactory接口包含以下几个基本方法: Ø Boolean containBean(String name):判断Spring容器是否包含id为name的Bean实例。
2017-07-31 10:02:33 480
原创 SqlSessionFactory和Sqlsession
SqlSessionFactory一旦被创建,应该在应用程序执行期间都存在,不要重复创建多次,建议使用单例模式。SqlSession的实例不能被共享,也是线程不安全的。创建方法如下:public class SqlSessionFactoryUtil{ //创建SqlSessionFactoryprivate volatile static SqlsessionFactory s
2017-07-30 21:20:55 1928
原创 session和cookie
session和cookie的关系当程序需要为某个客户端的请求创建一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),如果已包含则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用,如果客户端请求不包含session id,则为此客户端创建一个session并且生
2017-07-30 19:31:41 676
原创 数据库优化方案
一、sql语句优化和索引优化参考文章:http://www.cnblogs.com/tangyanbo/p/4462734.html https://tech.meituan.com/mysql-index.html http://www.jizhuomi.com/wap.asp?act=View&id=3151.mys
2017-07-30 18:33:34 429
转载 视图
视图是从一个或几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。既然视图的定义是基于基本表的,哪为什么还要定义视图呢?这是因为合理地使用视图能够带来许多好处:
2017-07-24 22:49:26 728
原创 HTTP头部信息
1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type。2. Accept-Charset: 浏览器申明自己接收的字符集3. Accept-Encoding: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)4. Accept-L
2017-07-19 11:28:51 397
原创 网络编程
一、InetAddress类代表IP地址,没有提供构造器,通过以下俩个方法获取InetAddress实例:getByName(String host):根据主机获取对应的InetAddress对象getByAddress(byte[] addr):根据原始IP地址获取对应的InetAddress对象二、URLDecoder和URLEncoder用于普通字符串和appli
2017-07-18 22:42:44 218
原创 计算机网络基础
一、OSI参考模型即开放系统互连参考模型,共有7层:物理层物理层处于OSI的最底层,是整个开放系统的基础。物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。数据链路层数据链路层的主要任务是实现计算机网络中相邻节点之间的可靠传输,把原始的、有差错的物理传输线路加上数据链路协议以后,构成逻辑上可靠的数据链路。需要完成的功能有链路管理、成帧、差错控制以及流量控制等。其中成帧...
2017-07-18 21:20:37 658
原创 concurrent包
原文出处:http://www.cnblogs.com/sarafill/archive/2011/05/18/2049461.htmljava.util.concurrent 包含许多线程安全、测试良好、高性能的并发构建块。不客气地说,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的并发操作。通过提供一组可靠的、高
2017-07-17 19:20:01 286
转载 MySql锁的概念
一、表锁和行锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。MySQL大致可归纳为以下3种锁:表级锁:开销小,加锁快;不会出现死锁;锁粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁粒度最小,发生锁冲突的概率最低,并发度最高。页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁粒度界于表锁和行锁之间,...
2017-07-15 20:59:14 978
原创 B树
1. 引子动态查找树主要有:二叉查找树(Binary Search Tree)平衡二叉查找树(Balanced Binary Search Tree)红黑树(Red-Black Tree ),B-treeB+-treeB*-tree 前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。 但是我们要面对这样一个实际问题,大规模数据存储中...
2017-07-10 16:21:08 327
原创 map集合
HashMap 实现类构造方法源码:[java] view plain copy print?static final int DEFAULT_INITIAL_CAPACITY = 16; // 默认初始化容量 static final float DEFAULT_LOAD_FACTOR = 0.75f; final float loadFactor; // 用于计算扩容阀值 /* Th...
2017-07-08 16:14:56 209
原创 set集合
SET集合1 HashSet的底层存储数据结构特点:1、无序不重复 2、元素可为null 3、不同步先来看HashSet的源码,首先看默认构造器:[java] view plain copy print?public HashSet() { map = new HashMap(); }
2017-07-07 16:59:40 149
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人