JAVA
陈小起
这个作者很懒,什么都没留下…
展开
-
Collections
TreeSet:以有序状态保存并可防止重复HashMap:可用成对的name/value来保存与取出LinkedList:针对经常插入或删除中间元素的高效率集合HashSet:防止重复的集合,可快速找寻相符的元素LinkedHashMap:类似HashMap,但可记住元素插入的顺秀,也可以设定成依照元素上次存取的先后来排序原创 2017-07-28 14:09:20 · 131 阅读 · 0 评论 -
ByteBuf
从内存分配的角度看,ByteBuf可以分为两类: 堆内存(HeapByteBuf)字节缓冲区:特点是北村的都分配和回收速度快,可以被JVM自动回收;缺点就是如果进行Socket的I/O读写,需要额外做一次内存复制,将堆内存对应的缓冲区复制到内核Channel中,性能会有一定程度的下降。 直接内存(DirectByteBuf)字节缓冲区:非堆内存,它在堆外进行内存分配,相比于堆内存,它的...原创 2018-03-15 16:28:24 · 392 阅读 · 0 评论 -
JAVA--Comparable&compareTo
Comparable:public interface Comparable<T> //Comparable就是一个泛型接口public int compareTo() //compareTo方法就构成了整个Comparable源码的唯一的有效方法Comparator:public interface Comparator<T> //Comparator...原创 2018-03-01 17:19:57 · 258 阅读 · 0 评论 -
Channel和Unsafe
实际的I/O读写操作都是由Unsafe接口负责完成的。 bind方法主要用于绑定指定的端口,对于服务端,用于绑定监听端口,可以设置backlog参数;对于客户端,主要用于指定客户端Channel的本地绑定Socket地址。 disconnect方法用于客户端或者服务器端主动关闭连接。 close方法,在链路关闭之前需要首先判断是否处于刷新状态,如果处于刷新状态说明还有消息尚未发送...原创 2018-03-16 10:51:37 · 277 阅读 · 0 评论 -
ChannelPipeline和ChannelHandler
Netty的Channel过滤器实现原理与Servlet Filter机制一致,它将Channel的数据管道抽象为ChannelPipeline,消息在ChannelPipeline中流动和传递。ChannelPipeline持有I/O事件拦截器ChannelHandler的链表,由ChannelHandler对I/O事件进行拦截和处理,可以方便地通过增删ChannelHandler来实现...原创 2018-03-16 14:05:34 · 196 阅读 · 0 评论 -
Netty应用开发
创建两个NioEventLoopGroup实例:NioEventLoopGroup是个线程组,它包含了一组NIO线程,专门用于网络时间的处理,实际上它们就是Reactor线程组。创建两个的原因是一个用于服务器接受客户端请求,一个用于进行SocketChannel的网络读写。创建ServerBootstrap对象,它是Netty用于启动NIO服务端的辅助启动类,目的是降低服务端的开发复杂度,进行服务...原创 2018-03-12 10:40:57 · 121 阅读 · 0 评论 -
throw和throws
1.java处理异常方式在java代码中如果发生异常的话,jvm会抛出异常对象,导致程序代码中断,这个时候jvm在做的操作就是:创建异常对象,然后抛出,比如:[java] view plain copy int i= 1; int j = 0; int res = 0; res = i/j;//除0错误 System.out.println(res); 这5句代码运行到第四句会中断,因...原创 2018-03-12 10:45:01 · 150 阅读 · 0 评论 -
Netty--回车换行符解决TCP半包/粘包问题
SocketChannel.pipeline().addLast(new LineBasedFrameDecoder(1024);SocketChannel.pipeline().addLast(new StringDecoder());LineBaseFrameDecoder的工作原理是它依次遍历ByteBuf中的可读字节,判断看是否有"\n"或者"\r\n",如果有,就以此位置为结束位置,从可...原创 2018-03-12 15:08:56 · 3164 阅读 · 0 评论 -
EventLoop和EventLoopGroup
Reactor单线程模型,指所有的I/O操作都在同一个NIO线程上面完成。NIO线程的职责如下。作为NIO服务端,接受客户端的TCP连接;作为NIO客户端,向服务器发起TCP连接;读取通信对端的请求或者应答消息;向通信对端发送消息请求或者应答消息。 Reactor多线程模型,它与单线程模型的最大区别就是有一组NIO线程来处理I/O操作。特点如下。有专门一个NIO线程--Accept...原创 2018-03-19 09:36:30 · 400 阅读 · 0 评论 -
Netty--Future和Promise
Future用于获取异步操作的结果,Netty的Future都是与异步I/O操作相关的,因此,命名为ChannelFuture,代表它与Channel操作相关。ChannelFuture有两种状态:uncompleted和completed。 Promise是可写的Future,Future本身并没有写操作相关的接口,Netty通过Promise对Future进行扩展,用于设置I/O...原创 2018-03-19 09:56:26 · 608 阅读 · 0 评论 -
编解码技术
评判一个编解码框架的优劣时,往往会考虑以下几个因素:是否支持跨语言,支持的语言种类是否丰富编码后的码流大小编解码的性能类库是否小巧,API使用是否方便使用者需要手工开发的工作量和难度Java序列化的缺点: 1.无法跨语言 2.序列化后的码流太大 3.序列化性能太低因此,通常不会选择Java序列化作为远程节点调用的编解码框架。Google的Protobuf(Google Proto...原创 2018-03-13 11:50:49 · 247 阅读 · 0 评论 -
Struts2--标签库
用户界面标签:生成HTML元素 1,表单标签:生成HTML页面的Form元素,以及普通的表单元素 2,非表单标签:生成页面上的tree、tab等非用户界面标签:进行数据访问、逻辑控制等 1,数据访问标签:输出堆栈中的值、完成国际化等功能 2,流程控制标签:实现分支、循环等流程控制等<%@ taglib prefix="s" uri="/struts-tags" %&g...原创 2018-03-26 15:50:06 · 131 阅读 · 0 评论 -
NIO
1.缓冲区Buffer 在NIO库中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的;在写入数据时,写入到缓冲区中。任何时候访问NIO中的数据,都是通过缓冲区进行操作。2.通道Channel Channel是一个通道,它就像自来水管一样,网络数据通过Channel读取和写入。通道与流的不同之处在于通道是双向的,流只是在一个方向上移动(一个流必须是InputStream...原创 2018-03-09 11:09:07 · 130 阅读 · 0 评论 -
伪异步I/O
采用线程池和任务队列可以实现伪异步的I/O通信框架。 当有新的客户端接入的时候,将客户端的Socket封装成一个Task(该任务实现java.lang.Runnable接口)投递到后端的线程池中进行处理,JDK的线程池维护一个消息队列和N个活跃线程对消息队列里的任务进行处理。由于线程池可以设置消息队列的大小和最大线程数,因此,它的资源占用是可控的,无论多少个客户端并发访问,都不会导致资源的耗...原创 2018-03-07 17:30:51 · 214 阅读 · 0 评论 -
Thread
如果两个及以上的Thread存取堆上相同的对象可能会出现严重的问题如果两个及以上的Thread存取相同的对象可能会引发数据的损毁要让对象在Thread上有足够的安全性,就要判断哪些指令不能被分割执行使用synchronized关键词修饰符可以防止两个Thread同时进入同一对象的同一方法。原创 2017-07-28 10:02:19 · 232 阅读 · 0 评论 -
Eclipse快捷键
1、alt+?或alt+/:自动补全代码或者提示代码这个是我最得意的快捷键组合了,尤其是当输入syso几个字符之后,2个手指轻松按下这2个键的时候,自动就补全System.out.println();了,而且eclipse默认是出现“.”进行方法提示,如果中间提示断了想再看的话还得重新在对应类或者变量的前边输入“.”才可以再看到提示,不过如果这2个键结合是使用同样可以起到提示的作用,你可以原创 2017-10-12 11:54:58 · 126 阅读 · 0 评论 -
JAVA编程思想--垃圾回收器
你可以把C++里的堆想象成一个院子,里面每个对象都负责管理自己的底盘,一段时间以后,对象可能被销毁,但底盘必须加以重用。在某些JAVA虚拟机中,堆的实现截然不同:它更像一个传送带,每分配一个新对象,它就往前移动一格。这意味着对象存储空间的分配速度非常快。JAVA的“堆指针”只是简单地移动到尚未分配的区域,其效率比得上C++在堆栈上分配空间的效率。当垃圾回收器工作时,将一面回收空间,一面使堆中的原创 2017-11-13 14:52:27 · 176 阅读 · 0 评论 -
JAVA编程思想--成员初始化
初始化的顺序是先静态对象,而后“非静态”对象。在类的内部,变量定义的先后顺序决定了初始化的顺序,即使变量定义散布于方法定义之间,它们仍旧会在任何方法(包括构造器)被调用之前得到初始化。、无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量。原创 2017-11-13 17:36:29 · 164 阅读 · 0 评论 -
JAVA--HttpServlet
Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类.在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类.Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servle原创 2017-12-21 14:47:05 · 158 阅读 · 0 评论 -
JAVA--JDBC
JDBC连接数据库:导入 JDBC 驱动: 只有拥有了驱动程序我们才可以注册驱动程序完成连接的其他步骤。注册 JDBC 驱动程序:这一步会导致 JVM 加载所需的驱动类实现到内存中,然后才可以实现 JDBC 请求。数据库 URL 指定:创建具有正确格式的地址,指向到要连接的数据库。创建连接对象:最后,代码调用 DriverManager 对象的 getCon原创 2017-12-12 20:59:54 · 165 阅读 · 0 评论 -
JAVA编程思想--并发
用并发解决的问题大体上可以分为“速度”和“设计可管理性”两种。阻塞:如果程序中某个任务因为该程序控制范围之外的某些条件而导致不能继续执行,那么我们就说这个任务或线程阻塞了。编写多线程程序最基本的困难在于协调不同线程驱动的任务之间对这些资源的使用,以使得这些资源不会同时被多个任务访问。线程可以驱动任务,因此需要一种描述任务的方式,这可以由Runnable接口来提供。要想定原创 2018-01-23 20:55:10 · 295 阅读 · 0 评论 -
JAVA--Comparable&&Comparator&&compare&&compareTo
Comparable:public interface Comparable //Comparable就是一个泛型接口public int compareTo() //compareTo方法就构成了整个Comparable源码的唯一的有效方法Comparator:public interface Comparator //Comparator就是一个泛型接口public in原创 2018-01-19 14:47:27 · 196 阅读 · 0 评论 -
JAVA--Iterable&&iterator
package java.lang; public interface Iterable{ Iterator iterator(); } Iterable接口 (java.lang.Iterable) 是Java集合的顶级接口之一。Iterable接口中只包含一个方法,就是一个iterator()方法,用来返回一个Iterator类型的对象,或者说返回一个实现了Iterator原创 2018-01-19 14:53:04 · 169 阅读 · 0 评论 -
JAVA--Priority&&BinaryHeap
BinaryHeap:二叉堆。堆有两个性质,即结构性和对序性。堆是一颗被完全填满的二叉树,有可能的例外是在底层,底层上的元素从左到右填入,这样的树被称为完全二叉树。因为完全二叉树的规律,所有它可以用一个数组表示。对于数组中任一位置i上的元素,其左儿子在位置2i上,右儿子在左儿子后的单元(2i+1)中,它的父亲则在位置ceil(i/2);因此堆结构将由一个(Comparable对象的)数组和原创 2018-01-20 15:19:09 · 185 阅读 · 0 评论 -
BIO
采用BIO通信的模型的服务端,通常由一个独立的Acceptor线程负责监听客户端的连接,它接受到客户端连接请求之后为每一个客户端创建一个新的线程进行链路处理,处理完成之后,通过输出流返回应答给客户端,线程被销毁。这就是典型的一请求一应答通信模型。该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发访问量增加后,服务端的线程个数和客户端并发访问数呈1:1的正比关系,由于线程是java虚拟机非常宝贵的系...原创 2018-03-07 15:04:45 · 172 阅读 · 0 评论 -
Struts--Struts
MVC设计模式的思想就是把Web应用程序分为3个核心模块:模型、视图和控制器。 模型:模型是Web程序中用于表示业务数据进行业务逻辑操作的部分。 视图:视图是用户在Web浏览器中可以看到的界面。不进行业务逻辑的处理,而是把用户提交的数据传递到模型去处理。 控制器:控制器用来接收用户请求,并调用模型和视图最终完成请求。Struts1是在模型JSP+Servlet+JavaBean的...原创 2018-03-26 16:47:35 · 127 阅读 · 0 评论