
JAVA
文章平均质量分 90
踏花忆锦年
逆风的方向更适合飞翔
展开
-
ReentrantLock实现原理及源码分析
ReentrantLock实现原理及源码分析 ReentrantLock是Java并发包中提供的一个可重入的互斥锁。ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Synchronized,ReentrantLock增加了一些高级的扩展功能,比如它可以实现公平锁,同时也可以绑定多个Condito...转载 2019-01-02 15:40:16 · 284 阅读 · 0 评论 -
Mysql 中四种隔离级别
Mysql 中四种隔离级别Mysql 中四种隔离级别分别是读未提交、读已提交、可重复读、串行化。读未提交(READ UNCOMMITTED):未提交读隔离级别也叫读脏,就是事务可以读取其它事务未提交的数据。例如:如果一个事务中对数据进行了更新,但事务还没有提交,另一个事务可以“看到”该事务没有提交的更新结果,这样造成的问题就是,如果第一个事务回滚,那么,第二个事务在此之前所“看原创 2018-02-01 20:47:20 · 302 阅读 · 0 评论 -
对 ajax 的记录
对 ajax 的理解Ajax 是一种创建交互式网页应用的的网页开发技术;Asynchronous JavaScript and XML”的缩写。 Ajax的优势:通过异步模式,提升了用户体验。优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用。Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工原创 2018-02-01 20:29:13 · 174 阅读 · 0 评论 -
memcached 使用 (上)
memcached 使用 (上)memcached是一个高性能,分布式的内存对象缓存系统。由livejounal旗下的danga公司开发的老牌nosql应用. memcached的连接memcached客户端与服务器端的通信比较简单,使用的基于文本的协议,而不是二进制协议.(http协议也是这样),原创 2018-01-30 22:38:04 · 138 阅读 · 0 评论 -
memcached 使用 (下)
memcached 使用 (下)内存的碎片化如果用 c语言直接malloc,free来向操作系统申请和释放内存时,在不断的申请和释放过程中,形成了一些很小的内存片断,无法再利用.这种空闲,但无法利用内存的现象,---称为内存的碎片化.slab allocator缓解内存碎片化memcached用slab allocator机制来管理内存.sl原创 2018-01-30 22:47:26 · 204 阅读 · 0 评论 -
ImageView中XML属性src和background的区别
ImageView中XML属性src和background的区别background会根据ImageView组件给定的长宽进行拉伸,而src就存放的是原图的大小,不会进行拉伸。src是图片内容(前景),bg是背景,可以同时使用。此外:scaleType只对src起作用;bg可设置透明度,比如在ImageButton中就可以用Android:scaleType控制图片的缩放方式原创 2017-05-25 22:36:56 · 301 阅读 · 0 评论 -
Android OKHttp
Android OKHttpOkHttp 会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个IP地址,当第一个IP连接失败的时候,OkHttp会自动尝试下一个IP。OkHttp还处理了代理服务器问题和SSL握手失败问题。使用 OkHttp 无需重写您程序中的网络代码。OkHttp实现了几乎和java.net.HttpURLConnection一样的API。如果你用了 Apa原创 2017-05-25 22:25:45 · 333 阅读 · 0 评论 -
Fastjson
FastjsonFastjson是一个Java语言编写的高性能功能完善的JSON库。fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson。并且还超越了google的二进制协议protocolbuf。Fastjson完全支持http://json.org的标准,也是官方网站收录的参考实现之一。支持各种JDK类型。包括基本类型、Ja原创 2017-05-25 19:44:52 · 318 阅读 · 0 评论 -
EventBus
EventBusEventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。EventBus3.0简单实用分为简单的五个步骤。1、选择EventBus的版本并进行相关配置。2、创建Ev原创 2017-05-25 19:37:10 · 342 阅读 · 0 评论 -
Java8新特性
Java8新特性 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。Java8 新增了非常多的特性,但总结下无非以下几个:Lambda 表达式 − Lambd原创 2018-02-02 21:08:50 · 471 阅读 · 0 评论 -
Java 8 Lambda 表达式&Stream
Java 8 Lambda 表达式Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。语法lambda 表达式的语法格式如下:(parameters) -> expression原创 2018-02-02 21:37:40 · 216 阅读 · 0 评论 -
Java finally语句到底是在return之前还是之后执行?
Java finally语句到底是在return之前还是之后执行?一直对finally的执行问题一头雾水,网上的博客也是人云亦云,今天自己做了了小实验,得出了以下结论:finally语句是在try的return语句执行之后,return返回之前执行。1. finally语句在return语句执行之后return返回之前执行的。public static int原创 2018-02-04 20:43:44 · 286 阅读 · 0 评论 -
CopyOnWriteArrayList实现原理及源码分析
CopyOnWriteArrayList实现原理及源码分析CopyOnWriteArrayList是Java并发包中提供的一个并发容器,它是个线程安全且读操作无锁的ArrayList,写操作则通过创建底层数组的新副本来实现,是一种读写分离的并发策略,我们也可以称这种容器为"写时复制器",Java并发包中类似的容器还有CopyOnWriteSet。本文会对CopyOnWriteA...转载 2019-01-02 15:07:40 · 462 阅读 · 0 评论 -
Web 前端性能优化 -浏览器访问优化
浏览器访问优化1.减少http请求 HTTP协议是无状态的应用层协议,意味着每次HTTP请求都需要建立通信链路、进行数据传输,而在服务器端,每个HTP都需要启动独立的线程去处理。这些通信和服务的开销都很昂贵,减咸少HTTP请求的数目可有效提高访问性能。 减少HTTP的主要手段是合并CSS、合并 Javascript、合并图片。将...原创 2018-05-15 20:52:57 · 237 阅读 · 0 评论 -
策略模式
策略模式定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。类型:行为类模式 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换。在前面说过的行为类模式中,有一种模式也是关注对算法的封装——模版方法模式。 ...原创 2018-04-22 12:29:53 · 141 阅读 · 0 评论 -
适配器模式
适配器模式定义:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 角色:目标(Target)角色:这就是所期待得到的接口,也就是这类的接口是符合我们要求的。 源(Adapee)角色:我们要使用的接口,但是这个接口不符合我们的要求,也就是现在需要适配的接口。 适...原创 2018-04-22 11:56:20 · 164 阅读 · 0 评论 -
建造者模式
建造者模式定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。生成器模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的对象。四个要素: Builder:生成器接口,定义创建一个Pro...原创 2018-04-22 11:53:47 · 149 阅读 · 0 评论 -
单例模式
单例模式定义: 单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例。特点: 1、单例类只能有一个实例。 2、单例类必须自己自己创建自己的唯一实例。 3、单例类必须给所有其他...原创 2018-04-22 11:45:34 · 154 阅读 · 0 评论 -
Java 中CountDownLatch、CyclicBarrier、Semaphore比较
Java 中CountDownLatch、CyclicBarrier、Semaphore比较jdk1.5之后,java的concurrent包提供了一些并发工具类,比如CountDownLatch和CyclicBarrier,Semaphore。这里简要的比较一下他们的共同之处与区别,同时介绍一下他们的使用场景。 CountDownLatch:一个线程A或是组线程A等待其它线程执行完毕后,原创 2018-02-07 12:33:52 · 504 阅读 · 0 评论 -
Android 数据存储与访问之——SharedPreferences保存用户偏好参数
Android 数据存储与访问之——SharedPreferences保存用户偏好参数 本节介绍的是使用SharedPreferences(保存用户偏好参数)保存数据,当我们的应用想要保存用户的一些偏好参数,比如是否自动登陆,是否记住账号密码,是否在Wifi下才能联网等相关信息,如果使用数据库的话,显得有点大材小用了!我们把上面这些配置信息称为用户的偏好设置,就是用户偏好的设置,原创 2016-12-31 10:26:41 · 471 阅读 · 0 评论 -
基于TCP协议的Socket通信
基于TCP协议的Socket通信1、Socket通信实现步骤解析:Step 1:创建ServerSocket和SocketStep 2:打开连接到的Socket的输入/输出流Step 3:按照协议对Socket进行读/写操作Step 4:关闭输入输出流,以及Socket2、Socket服务端的编写:Step 1:创建ServerSocket对象,绑定监听的端原创 2016-12-29 14:43:19 · 517 阅读 · 0 评论 -
Java内存管理:深入Java内存区域
Java内存管理:深入Java内存区域 对于Java程序员来说,在虚拟机的自动内存管理机制的帮助下,不再需要为每一个new操作去写配对的delete/free代码,而且不容易出现内存泄漏和内存溢出问题,看起来由虚拟机管理内存一切都很美好。不过,也正是因为Java程序员把内存控制的权力交给了Java虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那排查原创 2016-03-12 20:33:11 · 355 阅读 · 0 评论 -
java基础知识(三)
java基础知识(三) 1、请说出作用域public,private,protected,以及不写时的区别 答:这四个作用域的可见范围如下表所示。(如果在修饰的元素上面没有写任何访问修饰符,则表示friendly)。 备注:只要记住了有4种访问权限,4个访问范围,然后将全选和范围在水平和垂直方向上分别按排从小到大或从大到小的顺序排列,就很容易画出上面的图了。 2、O原创 2016-03-12 16:39:18 · 272 阅读 · 0 评论 -
java基础知识(二)
java基础知识(二) 1、"=="和equals方法究竟有什么区别? 答:==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否 相 同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变 量也占用一块内存,例如O原创 2016-03-12 11:44:24 · 286 阅读 · 0 评论 -
Java基础知识(一)
Java基础知识(一) 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 答:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。 2、Java有没有goto? 答:java中的保留字,现在没有在java中使用。 3、说说&和&&的区别。 答:&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当原创 2016-03-12 11:23:17 · 277 阅读 · 0 评论 -
编程规范
编程规范1、代码规范 (1)首先是要注意注释文档的格式,注释文档将用来生成HTML格式的代码报告,所以注释文档必须书写在类、域、构造函数、方法、定义之前。 (2)注释文档由两部分组成——描述、块标记。描述部分用来书写类的作用或者相关信息,块标记部分必 (3)注释的种类:文件头注释、构造函数注释、域注释、方法注释和定义注释。文件头注释需要注明该文件的创建时间、文件名、命原创 2016-03-12 10:41:13 · 502 阅读 · 0 评论 -
Android 内存监测工具 DDMS --> Heap
无论怎么小心,想完全避免bad code是不可能的,此时就需要一些工具来帮助我们检查代码中是否存在会造成内存泄漏的地方。Android tools中的DDMS就带有一个很不错的内存监测工具Heap(这里我使用eclipse的ADT插件,并以真机为例,在模拟器中的情况类似)。 用 Heap监测应用进程使用内存情况的步骤如下:1. 启动eclipse后,切换到DDMS透视图,并确认Devic原创 2016-04-05 09:37:54 · 357 阅读 · 0 评论 -
进程多线程
进程和线程1)进程是静态的,其实就是指开启的一个程序;而线程是动态的,是真正执行的单元,执行的过程。其实我们平时看到的进程,是线程在执行着,因为线程是作为进程的一个单元存在的。2)同样作为基本的执行单元,线程是划分得比进程更小的执行单位。3)每个进程都有一段专用的内存区域。与此相反,线程却共享内存单元(包括代码和数据),通过共享的内存单元来实现数据交换、实时通信与必要的同步操作。1原创 2016-03-11 15:59:10 · 582 阅读 · 1 评论 -
JAVA 集合
集合 1、特点:存储对象;长度可变;存储对象的类型可不同;2、集合框架:2)Collection(1)List:有序的;元素可重复,有索引(add(index, element)、add(index, Collection)、remove(index)、set(index,element)、get(index)、subList(from, to)、listIte原创 2016-03-11 10:19:54 · 382 阅读 · 0 评论 -
类加载器以及双亲委派模型介绍
类加载器及双亲委派模型1、什么是类加载器 在类加载阶段,有一步是“通过类的全限定名来获取描述此类的二进制字节流”,而所谓的类加载器就是实现这个功能的一个代码模块,这个动作是在Java虚拟机外部实现的,这样做可以让应用程序自己决定如何去获取所需要的类。 类加载器的作用:首先类加载器可以实现最本质的功能即类的加载动作。同时,它还能够结合java类本身来确定该类在原创 2016-03-12 21:49:23 · 499 阅读 · 0 评论 -
java虚拟机之java内存回收
java虚拟机之java内存回收 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来。在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。顾名思义,垃圾回收就是释放垃圾占用的空间,那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被确定为垃圾之后,采用什么样的策略来进行回收(释放空间原创 2016-03-14 20:09:46 · 421 阅读 · 0 评论 -
JVM 类的加载初始化
有且仅有如下五种情况必须立即对类进行“初始化”(而加载、验证、准备自然要在此之前开始)遇到new、getstatic、putstatic或in-vokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字转载 2016-06-13 18:53:29 · 441 阅读 · 0 评论 -
基于UDP协议的Socket通信
基于UDP协议的Socket通信 TCP和UDP最大的区别在于是否需要客户端与服务端建立连接后才能进行 数据传输,UDP以数据报作为数据的传输载体,在进行传输时 首先要把传输的数据定义成数据报(Datagram),在数据报中指明数据要到达的Socket(主机地址 和端口号),然后再将数据以数据报的形式发送出去,然后就没有然后了,服务端收不收到我就 不知道了,除非服务端收到后又给原创 2016-12-29 14:22:17 · 1263 阅读 · 0 评论 -
ArrayList简介
ArrayList简介ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用c原创 2016-06-14 21:18:50 · 1516 阅读 · 0 评论 -
Vector简介
Vector简介Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。 Vector实现了Serializable接口,因此它支持序列化,实现了C转载 2016-06-14 21:14:12 · 1000 阅读 · 0 评论 -
LinkedList简介
LinkedList简介LinkedList简介 LinkedList除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。 LinkedList同样是非线程安全的,只在单线程下适合使用。 LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。LinkedList原创 2016-06-14 20:32:52 · 1146 阅读 · 0 评论 -
JAVA对象内存布局 以及对象定位
JAVA对象内存布局 以及对象定位1、Java对象内存布局 在hotSpot虚拟机中,对象在内存中的布局可以分成对象头、实例数据、对齐填充三部分。 对象头:对象头包含两部分,第一部分主要包括对象自身的运行行元数据,比如哈希码、GC分代年龄、锁状态标志等;第二部分包含一个类型指针,指向类元数据,表明该对象所属的类型 实例数据:它是对象真正存储的有效信息,包括程序代码中转载 2016-06-13 19:54:48 · 610 阅读 · 0 评论 -
关于 ThreadLocal
关于 ThreadLocal关于ThreadLocal java提供了java.lang.ThreadLocal,主要是用于解决多线程情况下变量安全的问题。 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。ThreadLoca转载 2016-06-13 19:22:30 · 473 阅读 · 0 评论 -
触发Full GC执行的情况
触发FULL GC的四种情况1. System.gc()方法调用 一般情况下禁止使用此方法,让JVM自己决定FULL GC即可。2.老生代空间不足 老生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,会出现FULL GC情况。当执行Full GC后空间仍然不足,则抛出如下错误:Java.lang.OutOfMemoryError转载 2016-06-13 19:08:47 · 849 阅读 · 0 评论 -
Java内存分配策略
Java内存分配策略1. 优先在Eden上分配。 Java的对象优先会在新生代的Eden上分配。 我们可以看一个例子: 我设置了这些参数:-XX:+PrintGCDetails -Xms20m -Xmx20m -Xmn10m,堆内存分配20M,新生代10M,老生代10M,默认情况下Survivor区为8:1,所以Eden区域为8M 我运行这段代码:p转载 2016-06-13 19:02:30 · 441 阅读 · 0 评论