java
文章平均质量分 75
SerenoShen
不断提升自己!加油!加油!!
展开
-
Java 8 默认方法和多继承
Java 8 默认方法和多继承以前经常谈论的Java对比c++的一个优势是Java中没有多继承的问题。 因为Java中子类只能继承(extends)单个父类, 尽管可以实现(implements)多个接口,但是接口中只有抽象方法,方法体是空的,没有具体的方法实现,不会有方法冲突的问题。这些都是久远的说法了,自从今年Java 8发布后, 接口中也可以定义方法了(default method)。 之所以转载 2017-10-16 17:30:40 · 472 阅读 · 0 评论 -
如何学习掌握一个分布式系统-What We Talk About When We Talk About Distributed
长期以来学习掌握分布式系统的知识非常庞杂混乱,本文将分布式算法归纳为几种: 计时模型timing model 进程间通讯interprocess communication 失败模型failure model计时模型timing model计时模型分同步 异步和部分同步三种,这几种模型都有时间计时这个共同特点。同步模型是直接调用执行,组件之间同时按步骤执行,这个模型的问题是无法反映现实情况,翻译 2015-12-29 14:38:40 · 749 阅读 · 0 评论 -
CentOS-7 安装 Tomcat8.X
安装说明安装环境:CentOS7 安装方式:源码安装 软件:apache-tomcat-8.0.30.tar.gz 下载地址:http://tomcat.apache.org/download-80.cgi安装前提系统必须已经安装配置了JDK6+。(并且配置好环境变量)安装tomcat将apache-tomcat-8.0.30.tar.gz文件移动到/usr/local中执行以下操作:[ro原创 2015-12-28 20:07:00 · 3364 阅读 · 0 评论 -
ThreadLocal类详解与源码分析
概述我们知道Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就是说,多个DAO可以复用同一个模板实例而不会发生冲突。 我们使用模板类访问底层数据,根据持久化技术的不同,模板类需要绑定数据连接或会话的资源。但这些资源本身是非线程安全的,也就是说它们不能在同一时刻被多个线程共享。 虽然模板类通过资源池获取数据连接或会话,但资源池本身解决的是数据连接或会原创 2015-11-26 19:48:54 · 4723 阅读 · 4 评论 -
MyBatis--SqlSessionFactoryBuilder,SqlSessionFactory,SqlSession作用域和生命周期
Scope and LifecycleIt’s very important to understand the various scopes and lifecycles classes we’ve discussed so far. Using them incorrectly can cause severe concurrency problems.NOTE Object lifecycle翻译 2015-11-24 13:19:58 · 3910 阅读 · 0 评论 -
MyBatis--typeHandlers与Handling Enums
typeHandlersWhenever MyBatis sets a parameter on a PreparedStatement or retrieves a value from a ResultSet, a TypeHandler is used to retrieve the value in a means appropriate to the Java type. The foll转载 2015-11-24 13:36:18 · 2279 阅读 · 0 评论 -
Java应用类加载器原理与应用
Java类加载器架构在典型的Java SE应用程序中,Java SE平台中java.*包下的类都将被加载到特定的根类加载器中,并且不能被覆盖。 这时Java的一种安全机制,这种机制能够有效的阻止恶意代码的执行。例如:替换String类,或是重定义Boolean.TRUE和Boolean.FALSE。Java SE中的类加载机制在Java SE中,根类加载器的之后是扩展类加载器,它主要用于加载JRE原创 2015-11-17 18:47:48 · 1041 阅读 · 0 评论 -
web应用性能优化--采用gzip静态压缩+动态压缩方式压缩js、css文件
web应用性能优化–采用gzip静态压缩+动态压缩方式压缩js、css文件Web应用中通常都会有大量的javascript和css文件,如开源的javascript框架jquery、extjs-core等等,这些js框架,动辄上百K,这些框架大多数时候能提升我们的开发效率,但是使用中稍不留神很容易导致系统响应缓慢。为了提高js、css文件的下载速度,在网络传输层面提高页面的响应速度,减小文件的大小才原创 2015-11-16 15:30:49 · 10382 阅读 · 0 评论 -
MyBatis3搭配MySQL数据库开发时中文乱码问题解决
MyBatis3搭配MySQL数据库开发时中文乱码问题解决在采用MyBatis+MySQL数据库进行开发是,对于中文字符的乱码问题,主要有下面两种情况: 1. * mysql数据库自身编码问题(建库时设定,因为MySQL默认的编码并不是UTF-8,即使我们在my.ini文件中配置过也没用)*。 2. 连接mysql数据库时设置的url编码设置问题。对于第一种情况,最为有效的办法是通过重新建库解原创 2015-11-13 23:29:45 · 1710 阅读 · 0 评论 -
Java线程堆栈信息查看
Linux 下Java程序的线程堆栈查看方法:第一步:在终端运行Java程序第二步:通过命令 pidof java 找到已经启动的java进程的ID,选择需要查看的java程序的进程ID第三步:使用命令 kill -3 打印出java程序的线程堆栈信息第四步:通常情况下运行的项目可能会比较大,那么这个时候打印的堆栈信息可能会有几千到几万行,为了方便查看,我们往往需要将输出内容进行原创 2015-12-15 09:55:58 · 14533 阅读 · 0 评论 -
Flux架构学习
Flux是Facebook提出的一个系统架构,用于推进应用中的数据单向流动。其在Flux的官方博客上介绍如下:Flux is the application architecture that Facebook uses for building client-side web applications.同过这段话我们可以知道Flux主要还是一个web前端的系统架构,当前主要也是结合React生态系原创 2016-01-04 21:53:10 · 2171 阅读 · 0 评论 -
epoll模型和使用详解(精髓)epoll - I/O event notification facility
epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且转载 2016-01-26 14:06:28 · 9882 阅读 · 0 评论 -
Java的类路径讲解以及参数-cp的用法
ClassPathjava 是通过 java虚拟机来解释运行的, 也就是通过 java 命令。 javac 编译生成的 .class文件就是虚拟机要执行的代码,,称之为字节码(bytecode), 虚拟机通过 classloader来装载这些字节码, 也就是通常意义上的类. 这里就有一个问题, classloader 从哪里知道 java 本身的类库及用户自己的类在什么地方呢? 或者有着缺省值(当原创 2017-11-09 17:20:06 · 3111 阅读 · 0 评论 -
棋牌游戏服务器开发心得
一个多人在线的棋牌类网络游戏的项目临近尾声,我参与了该项目的整个设计流程,并且完成了90%的核心代码。关于这个项目,有很多地方值得聊一聊。本系列不打算把这个项目将得多么详细规范,那是设计文档应该描述的,我打算只说说一些值得注意的地方。这个项目的一个特别之处是,客户端是手机,用户通过移动网络与服务器通信。和PC相比,手机的处理能力极弱,而且网络流量费用昂贵。因为除了要考虑普通网络游戏的一些问题之外,这转载 2017-03-10 08:58:46 · 31891 阅读 · 13 评论 -
Mac下配置Java环境变量
Mac下配置Java环境变量下面的操作均在终端窗口完成。通过如下命令找到JDK的安装路径/usr/libexec/java_home -v 1.8打开系统环境变量配置文件sudo vim etc/profile在文件尾部,添加java路径JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home"CLASS_原创 2017-03-17 16:59:30 · 3646 阅读 · 0 评论 -
android键盘监听并模拟iOS提供的部分键盘事件
最近开发利用Cordova开发Hybrid应用时,遇到软键盘的事件监听,查看了所有官方插件后,发现软键盘这一块的插件并不算好用,(iOS和Android表现不一致),一开始准备完全接管键盘,后来发现iOS提供了一套相对完善的键盘事件,但是并没有提供呼出键盘的接口,美中不足呀!Android并没有提供良好的键盘事件,比如:键盘即将呼出,即将关闭等等事件。通过查找资料发现,在And原创 2016-08-15 23:01:49 · 933 阅读 · 0 评论 -
Java 8 Lambda Expression 学习
Java 8 Lambda ExpressionLambda表达式是什么在解释Java Lambda Expression是什么之前,我们先来看看lambda表达式在Java语言中的表示形式。在Java中,每一个Lambda表达式都对应一个类型,(通常是接口类型)。在Java8以前,也即是Java Lambda Expression出现之前,Java API中充斥着很多函数是接口,即:仅仅包含了一个原创 2016-02-26 22:58:43 · 4176 阅读 · 0 评论 -
Java8新特性--Interface中的default方法(接口默认方法)
Java8新特性–Interface中的default方法(接口默认方法)在Java8的新特性中有一个新特性为接口默认方法,该新特性允许我们在接口中添加一个非抽象的方法实现,而这样做的方法只需要使用关键字default修饰该默认实现方法即可。该特性又叫扩展方法。 直接上代码: 使用Java8新特性定义一个扩展方法:public interface Formula { double c原创 2016-02-25 21:20:36 · 22307 阅读 · 3 评论 -
Java 中带包的类的编译与执行
Java 中带包的类的编译与执行以HelloWorld.java 为例( 假设该文件的位置是/home/HelloWorld.java):[java] view plain copypackage a.b; public class HelloWorld{ public static void main(String[] a转载 2016-02-25 20:32:11 · 671 阅读 · 0 评论 -
Maven 标准目录结构
Maven 标准目录结构好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础。Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板。Maven2的标准目录结构如下:src/main/javaApplication/Library sourcessrc/main/resourcesAppli转载 2016-01-28 13:56:49 · 647 阅读 · 0 评论 -
优秀程序员的18大法则 -- The Principles of Good Programming
经过多年的积累,我发现,下面这些基本的指导法则,可以帮助我成为一个更加高效的程序员。 程序设计法则,与设计和工程的原理密切相关。下面这些编程法则帮助我让我获益匪浅,所以我想分享给大家,希望也能帮助大家更高效,生产出的代码更容易维护,并且 bug 和缺陷更少。 DRY 原则 不要重复(Don’t repeat yourself)——程序设计中一个最根本的原则翻译 2015-10-14 08:46:33 · 535 阅读 · 0 评论 -
Java的整体认识--类的初步理解和第一个Java程序
关于Java类的整体认识 在Java语言中,程序是由类(Class) 构建而成的。我们可以根据某个类的定义创建出任意数量的类实例对象 。类这好比一个模板,我们可以根据这一模板,创建出任意数量的实际使用的产品(这个比喻并不那么确切,但是有助于初学者理解Java中的类)。 类包含成员(member),成员主要包括字段(field)和 方法(method) 等。字段是可以属于类本身或者是类原创 2015-09-23 18:03:51 · 1036 阅读 · 0 评论 -
Java实现堆以及堆排序
堆排序堆排序使用的是二叉堆,它是一棵完全二叉树。堆有大顶堆和小顶堆之分。堆的一些性质:① :它是一颗完全二叉树。② :每个节点大于(小于)或等于它的任意一个孩子。表示堆的二叉树中,除了最底层外,该树是完全充满的,而且是从左至右填充的。如果堆的大小是提前可知道的,那么可以将堆存储在一个ArrayList或是一个数组中。(ArrayList底层实现也是一个数组啦!)存储在数原创 2014-10-03 22:58:33 · 756 阅读 · 0 评论 -
深刻理解Java中单例模式的实现
在之前的学习笔记中已经写了一篇关于单例模式的几种不同实现。这篇文章主要是对之前的那篇笔记的补充和加深。 · 在Java语言中使用单例模式能够带来的好处: (1):对于频繁使用的对象,可以省略创建对象那个所花费的时间,尤其是那些重量级对象的创建,对于重量级对象的创建那可是一笔相当可观的系统开销。 (2):由于new操作的次数减少了,进一步产生的益处就是,对系统内存的使用频率也会降低了,那么这一举原创 2015-03-10 20:29:30 · 804 阅读 · 0 评论 -
深刻理解代理模式在java中如何优化系统性能
最近参与实习公司的项目迭代,项目中需要实现系统的快速响应和大量数据处理。在不断的学习中获得一点儿心得,先记录下来。慢慢的修改! 关于代理模式的知识和简单应用之前的学习笔记中已经有记录了,可以复习一下。这里主要记录如何使用代理模式来实现延迟加载,进而提升系统系能和反应速度。使用代理模式实现延迟加载的一个简单实例: 需求:项目中对系统的启动速度做了一定的要求我们在系统首次加载时,因为不需要实际的数据原创 2015-03-10 21:31:24 · 1414 阅读 · 0 评论 -
Java实现冒泡排序以及优化冒泡排序的一些小技巧
约定声明: 为了更加简洁明了的说明算法的思想而不是仅仅局限于算法实现,本文假定:1、 要排序的数据都是整数2、 数据存储在数组中(正文中成为序列)3、 排序后的数据以升序排列 备注:本文为我个人学习后总结的一些学习笔记,难免有错误或是不足之处,还望大家见谅! 一:冒泡排序 对于含有N个元素的序列,冒泡排序在最坏情况下需要N-1次遍原创 2014-10-02 14:14:50 · 1050 阅读 · 0 评论 -
Java内存溢出的一个小例子
Java内存溢出内存溢出原创 2014-10-03 12:29:41 · 4392 阅读 · 0 评论 -
Java网络编程 --– 套接字的半关闭
Java网络编程 --– 套接字的半关闭半关闭(half-close):半关闭提供这样一种通信方式,套接字的一端可以终止其输出,同时仍然可以接受来自连接的另一端发送过来的数据。(类似于TCP的四次挥手的过程)半关闭是通过关闭一个套接字(浏览器)的输出流来表示发送给服务器(套接字一端)的数据已经结束了,但是必须保持浏览器端的输入流处于打开状态。图示:原创 2014-10-01 22:09:10 · 2078 阅读 · 0 评论 -
面向对象程序设计中类间的集中关联关系
1. association翻译成关联(关系,联合), 用来表述对象(注意是对象,不是类。虽然有时直接用类,那是出于方便的考虑)之间存在关系或者协作。从对象的数据结构上认识就是一个对象持有另一个对象的引用。当两个对象相互持有对方的引用那就是双向关联;当一个对象A持有另个对象B的引用,但B不持有A的引用那就是单向关联。在UML中关联用箭头线表示,单向关联是单箭头线,双向关联是双箭头线。箭头指向被引用转载 2014-09-29 21:23:25 · 1059 阅读 · 0 评论 -
设计模式--单例模式
设计模式学习笔记--单例模式的多种实现1、简单的实现(不考虑线程安全)public Class Singleton{ private static Singleton instance = null; private Singleton(){ } public static Singleton getInstance(){ if( instance == n原创 2014-03-04 16:56:52 · 720 阅读 · 0 评论 -
设计模式--动态代理模式
介绍:(约定:这里主要以Java语言进行讨论) 动态代理顾名思义是指在运行时,动态的生成代理类(即:代理类的字节码是在运行时生成并载入当前的ClassLoader的)。相比于静态代理的优势: 首先,动态代理不需要为真实主题写一个形式上完全一样的封装类,如果主题接口中的方法很多,为一个方法实现一个代理方法也是很繁琐的一件工作,同时,如果接口有任何改动,则真实主题和代理类都需要进行原创 2015-03-14 01:04:43 · 640 阅读 · 0 评论 -
Java中关于Arrays.asList方法的深入学习与理解
Java中关于Arrays.asList方法的深入学习与理解Java的标准库中在java.util包下提供了很多实用的工具类,如:Arrays,Collections等工具类都提供了一些比较实用的方法。在实际的开发使用中,我们经常需要使用这样的需求:将一个数组转换为结合类(List等)或是将一个集合类转换为数组。 在java.util.Arrays中有一个 asList 方法,其作用原创 2015-07-29 14:28:17 · 1353 阅读 · 0 评论 -
freemarker全解教程
copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,F原创 2015-08-27 10:35:09 · 771 阅读 · 0 评论 -
JavaEE 学习整理笔记: Servlet 介绍
Servlet是一种托管于Servlet容器的Web组件,可以动态生成内容。Web客户端使用请求/响应模式与Servlet交互。 Servlet容器负责Servlet的声明周期,接受请求与发送响应,并执行这一过程中所需要的编码/解码。 响应处理的过程是由Servlet完成的,Servlet容器只是负责发送Servlet处理后的响应。 WebServlet原创 2015-11-10 11:16:12 · 760 阅读 · 0 评论 -
使用Spring进行切面(AOP)编程
使用Spring进行切面(AOP)编程一、 AOP理论AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。转载 2015-10-22 19:54:57 · 2065 阅读 · 0 评论 -
I/O模型:同步I/O和异步I/O,阻塞I/O和非阻塞I/O
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,在大部分的博文中(包括WIKI在内),我们很可能看见这样的回答:同步I/O等价于阻塞I/O,异步I/O等价于非阻塞I/O。产生这样的答案主要是因为环境下有着不同的知识背景,导原创 2015-10-21 16:04:55 · 2526 阅读 · 1 评论 -
对象拷贝类PropertyUtils,BeanUtils,BeanCopier的技术沉淀
对象拷贝的应用现状简介:业务系统中经常需要两个对象进行属性的拷贝,不能否认逐个的对象拷贝是最快速最安全的做法,但是当数据对象的属性字段数量超过程序员的容忍的程度,代码因此变得臃肿不堪,使用一些方便的对象拷贝工具类将是很好的选择。目前流行的较为公用认可的工具类:Apache的两个版本:(反射机制)org.apache.commons.beanutils.Propert转载 2015-11-04 23:11:47 · 2122 阅读 · 0 评论 -
JVM内存模型以及垃圾回收
以hotspot虚拟机为例JAVA堆的结构可以用下图来描述:内存由 Perm 和 Heap 组成. 其中 Heap = {Old + NEW = { Eden , from, to } }JVM内存模型中分两大块,一块是 NEW Generation, 另一块是Old Generation.在New Generation中,有一个叫Eden的空间,主要是用来存放新生的对原创 2015-09-07 18:12:58 · 482 阅读 · 0 评论 -
git 删除右键菜单
首先,我表示git默认的右键菜单很烦,太多项了,而我们平时用的最多的无非是一个Git Bash!删除msGit右键菜单如果是windows 64位系统cmd进入"C:\Program Files (x86)\Git\git-cheetah"目录,运行regsvr32 /u git_shell_ext64.dll复制代码如果是windows 64位系统转载 2015-09-09 22:04:24 · 1855 阅读 · 0 评论 -
jvm内存参数设置
1. Heap设定与垃圾回收Java 内存分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。通常把前两个区域叫做堆区(Heap),Permanent区则负责保存反射对象,Class的meta信息等.堆区发生内存溢出的异常为:java.lang.OutOfMemoryError: Java heap space,转载 2015-09-07 18:09:29 · 543 阅读 · 0 评论