
Java
文章平均质量分 56
JoesonChan
这个作者很懒,什么都没留下…
展开
-
GC回收器选择
使用JDK 8,如果堆内存小于6GB,选择CMS垃圾收集器;如果堆内存为6GB及以上,果断选择G1垃圾收集器;如果CPU不够强,例如不到4核,可以选择UseParallel垃圾收集器。原创 2022-02-20 13:08:00 · 583 阅读 · 0 评论 -
Java NIO——6 基于非阻塞编程UDP NIO的例子
好吧,承接上篇文章,下面给出一个udp不可靠无连接的例子,他的次传送都是一个udp报文,不向上面文章中tcp是基于流的代码:Server:/** * 服务器端 * * @author Joeson * */public class UDPServer{ DatagramChannel channel; Selector selector; publi...原创 2019-10-05 22:37:03 · 3452 阅读 · 4 评论 -
HashMap在高并发下引起的死循环
HashMap其实并不是线程安全的,在高并发的情况下,是很可能发生死循环的,由此造成CPU 100%,这是很可怕的,所以在多线程的情况下,用HashMap是很不妥当的行为,应采用线程安全类ConcurrentHashMap进行代替。HashMap死循环原因HashMap进行存储时,如果size超过当前最大容量*负载因子时候会发生resize,首先看一下resize原代码v...原创 2019-09-23 10:35:38 · 3262 阅读 · 0 评论 -
JVM对象逃逸
1, 是JVM优化技术,它不是直接优化手段,而是为其它优化手段提供依据。逃逸分析,是一种可以有效减少Java 程序中同步负载和内存堆分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java Hotspot编译器能够分析出一个新的对象的引用的使用范围从而决定是否要将这个对象分配到堆上。Java在Java SE 6u23以及以后的版本中支持并默认开启了逃逸分析的选项。Java的 HotSpot ...原创 2019-07-28 14:36:52 · 5756 阅读 · 0 评论 -
线程池线程数设置
Java编程实践中 理论Nthreads =Ncpu * Ucpu* (1+w/c)Nthreads:线程数Ncpu:CPU核心数Ucpu:Cpu使用率,0~1w:等待时间c:计算实践Java 虚拟机并发编程 理论Nthreads = Ncpu /(1-阻塞系数)阻塞系数取值0~1,计算密集型任务为0,IO密集型为1实践Java Ncpu获...原创 2019-06-04 21:32:27 · 4659 阅读 · 0 评论 -
远程方法调用——RMI
RMIRMI (Remote Method Invocation)是Java用于实现透明远程调用的重要机制。在远程调用中,客户端仅有服务器端提供的接口。通过此接口实现对远程服务器端的调用。其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java...原创 2014-07-13 16:51:20 · 3879 阅读 · 0 评论 -
UserNamePasswrodAuthenticationFilter验证过程
体系结构AuthenticationManager的体系结构AuthenticationProvider原创 2014-03-09 11:35:32 · 4471 阅读 · 0 评论 -
SpringSecurity Filter处理流程
首先,看一下调试的配置FilterChainProxy的处理过程这是一个典型的责任链模式,推荐看一下这个博客http://www.verydemo.com/demo_c143_i2473.htmlSecurityContextPersistenceFilter功能:负责从SecurityContextRepository获取或存储原创 2014-03-09 11:20:33 · 7568 阅读 · 1 评论 -
完全背包问题的改进实现
完全背包问题就是每个东西都不限数量的,01背包问题呢,则是限制数量为1对于改进了的01背包问题,也有改进了的背包问题,他们的想法上是一致的,只不过实现上有了一点差别也是比较简单的,亲手debug一下吧/** * 完全背包问题<br/> * * f[v]=max{f[w],f[w-w[i]]+v[i]}<br/> * 也就是f[i][...原创 2014-03-08 18:25:37 · 4085 阅读 · 0 评论 -
01背包的改进实现
居然没想到背包问题还可以这么实现,在空间复杂度上达到O(W)次,有点不可思议啊比较简单,不解释了,debug一下就明白了/** * 背包问题<br/> * f[w]=max{ f[v],f[w-w[i]]+v[i]}<br/> * 也就是f[w][i] = max{f[w][i],f[w-w[i]+v[i]}<br/> * 时...原创 2014-03-08 00:50:36 · 4420 阅读 · 0 评论 -
Java8新特性——Lambda表达式
在2月4日,Java已经发布了java8 rc1版本了,由此来过过java8的瘾Java下载地址https://jdk8.java.net/download.html对应的支持java8的 eclipse-java下载地址http://downloads.efxclipse.org/eclipse-java8/efxclipse-jdk8/在说Lamdba表达式之前,先说一下原创 2014-02-24 13:09:37 · 4513 阅读 · 0 评论 -
Spring源码解读——Spring容器初始化 2
这篇博客是前一篇博客Spring源码解读——Spring容器初始化 1的延续,在看这篇博客之前,最后先看一下前一篇接着我们继续看WebApplicationContext的refresh()方法原创 2014-01-25 23:14:05 · 4699 阅读 · 0 评论 -
String 值传递or引用传递
其实,要是在之前,我会很肯定的回答String是引用传递,但是今晚一个例子,也可以说是自己忘了一些String的知识点,如需复习一下String的可以,看一下我之前的一篇博客用好字符串,提防陷阱好吧,我简单列一下我遇到的情况原创 2014-01-24 23:34:00 · 4538 阅读 · 0 评论 -
Spring源码解读——Spring容器初始化 1
如果你是Spring新手的话,可以去http://download.csdn.net/detail/chenxuegui123/6881245下一些源代码例子跟着调试运行 因为WebApplicationContext 需要ServletContext 实例,也就是说它必须在拥有Web 容器的前提下才能完成启动的工作。有过Web 开发经验的读者都知道可以在web.xml 中配置自启动的Servlet 或定义Web 容器监听器(ServletContextListener),借助这两者中的任何一个,我们原创 2014-01-24 19:12:06 · 8155 阅读 · 2 评论 -
Spring笔记1——控制反转容器
如果你是Spring新手的话你可以去http://download.csdn.net/detail/chenxuegui123/6881245下一些源代码例子看,如果你用过spring,那本文章可以当作知识的回顾原创 2014-01-24 17:30:03 · 4497 阅读 · 0 评论 -
动态规划——5 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m
这是一道中兴的面试题题目:输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来.原创 2014-01-23 22:46:12 · 8274 阅读 · 0 评论 -
计数排序
比较计数比较计数的思想就是算出列表中小于该元素个数,并把结果记录在一张表,在根据表,指出元素在有序表的位置比较计数的思想确实很简单,接下来,看它的实现代码吧原创 2014-01-09 01:19:32 · 3758 阅读 · 0 评论 -
Java NIO——5 基于非阻塞编程NIO的例子
之前,写的大多都是一些NIO知识点,没有贴出实例,可能看起来比较晦涩,下面是一个基于非阻塞的nio实例Server:原创 2014-01-08 01:34:44 · 11893 阅读 · 2 评论 -
高斯消去法
对于形如一下的方程组,联立很容易借出来,可当变量个数达到一定数目,那会导致算法变得非常笨重2x + y - z = 8 \quad (L_1)-3x - y + 2z = -11 \quad (L_2)-2x + y + 2z = -3 \quad (L_3)原创 2014-01-08 00:18:26 · 4794 阅读 · 0 评论 -
霍纳法则和二进制幂
首先说一下霍纳法则,这对于多次幂来说,减少乘法是很重要的,因为相比加法,乘法的执行效率更低我们先看一下这样一个多项式 p(x) = 2*x^4 - 1*x^3 - 3*x^2 + 1*x^1 - 5 = x ( x ( x ( 2x - 1 ) + 3 ) + 1 ) - 5原创 2014-01-07 01:16:34 · 7103 阅读 · 2 评论 -
Netty4 4_ChannelHandler在ChannelPipe中的运行顺序
ChannelPipeline、ChannelHandlerContext和ChannelHandler三者之间关系的模型:原创 2014-01-06 19:55:31 · 5529 阅读 · 0 评论 -
DatagramChannel使用
DatagramChannel是nio中处理UDP的类,可以使用2种方式:DatagramChannel.receive(ByteBuffer dst)和DatagramChannel.send(ByteBuffer src, SocketAddress target)调用connect()之后,使用read和write.方式一send和receive示例原创 2014-01-04 11:14:39 · 7289 阅读 · 0 评论 -
用好字符串,提防陷阱
最基础的知识总是最容易忘记的,所以在回顾一下字符串吧,加深记忆1、定义字符串的两种最常见的形式原创 2014-01-03 21:37:26 · 3811 阅读 · 0 评论 -
全排序
/** * 全排列 * * @author 陈雪桂 * */public class AllRange{ static int count = 0; public static void main(String[] args) { AllRange allRange = new AllRange(); char[] a = allRange.init(args)原创 2014-01-03 00:20:48 · 4133 阅读 · 2 评论 -
Netty4 3_EventExecutorGroup
其实,我觉得netty的源码还是有点恶心的,特别是注解,很多相应的方法和属性的都没有写上注释,只有在抽象接口中有方法的说明,而子类的相关细节却被完完全全的忽略,笔者这样增加了开发人员的netty的研读,也加大理解netty架构的难度原创 2014-01-03 00:12:31 · 8103 阅读 · 1 评论 -
Java NIO——4 在多线程环境下的恶梦之终结
有人说java nio在多线程环境下编程简直就是个恶梦,其实你如果能把握住java nio API的要领,你就可以将之驾驭. 0. 一个 channal 对应一个SelectionKey in the same selector.e.g:SelectionKey sk=sc.register(selector, SelectionKey.OP_READ, hand转载 2014-01-02 21:54:54 · 6028 阅读 · 0 评论 -
Netty4 2_ChannelInitializer
在上一篇博客中,我们看到例子中有一段代码try { // 一个服务器助手类 ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workerGroup) //用它来建立新accept的连接,用于构造serversocketchannel的工厂类原创 2013-12-25 00:38:36 · 6691 阅读 · 0 评论 -
排序汇总(Java实现)
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。那什么是稳定的排序算法呢?就是在排序的过程中,相等的两个数并不会在排列后中为位置发生次序发生颠倒(一般而言,交换相隔很远的元素的算法是不稳定的)时间效率分析汇总 排序法 平均时间 ...原创 2013-12-24 16:52:21 · 3942 阅读 · 0 评论 -
Java NIO——3 非阻塞与selector
一、选择器基础1、选择器提供选择执行已经就绪的任务的能力,这使得多元 I/O 成为可能。2、您需要将之前创建的一个或多个可选择的通道注册到选择器对象中。一个表示通道和选择器的键将会被返回。选择键会记住您关心的通道。它们也会追踪对应的通道是否已经就绪。当您调用一个选择器对象的 select( )方法时,相关的键集会被更新,用来检查所有被注册到该选择器的通道。您可以获取一个键的集合,从而找到当时已经就绪的通道。通过遍历这些键,您可以选择出每个从上次您调用select( )开始直到现在,已经就绪的通道。原创 2013-12-24 16:34:06 · 6275 阅读 · 1 评论 -
Netty4 1_netty入门
Netty 努力提供一个异步的事件驱动网络程序框架和工具, 能快速开发易于维护的高性能, 高可扩展性的协议服务器和客户端.换句话说, Netty 是一个NIO 客户端/ 服务器架构, 可以快速和容易的开发网络程序就像协议服务器和客户端.它极大的简化了网络开发, 如TCP 和UDP 套接字服务器的开发.带着来自于大量协议如FTP,SMTP, HTTP以及各种二进制和基于文本的传统协议的实现的经验, Netty被精心设计. 所以, Netty 成功的找到一种方法去实现简易开发, 性能,原创 2013-12-15 19:29:24 · 6845 阅读 · 0 评论 -
BloomFilter 大数据处理
Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。 一. 实例 为了说明Bloom Filter存在的重要意义,举一个实例: 假设要你写一个网络蜘蛛(web crawler)。由于网络间的链接错综复杂,蜘蛛在网络间爬行很可能会形成“环”。为了避免原创 2013-12-08 00:29:36 · 3659 阅读 · 0 评论 -
1的数目
这是题目:给定一个十进制正整数 N,写下从1 开始,到 N的所有整数,然后数一下其中出现的所有“1”的个数其实这个问题,我们可以暴力的去实现它,不过时间效率会是一个很大的问题public int sum1(int n) { int iNum = 0; int count = 0; for (int i = 1; i <= n; i++)原创 2013-10-17 00:45:05 · 3343 阅读 · 0 评论 -
Java位操作运算
移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:>(带符号右移)和>>>(无符号右移)。 在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次转载 2013-09-30 00:30:45 · 4399 阅读 · 0 评论 -
Java NIO——2 缓冲区
一、缓冲区基础1、缓冲区并不是多线程安全的。2、属性(容量、上界、位置、标记)capacitylimit 第一个不能被读或写的元素position 下一个要被读或写的元素索引mark 一个备忘位置3、方法操作(1)翻转buffer.flip() 等同于 buffer.limit(buffer.position()).position(0)(2原创 2013-09-08 23:52:44 · 4501 阅读 · 0 评论 -
Java NIO——1 NIO简介
其实,当很多人都在认为Java比C或者C++慢,这首先是由于他是一门介于编译和解析的语言,这可能才是他慢的主要原因。但是近年来Oracle公司一直致力于对Jre的解析算法进行优化,使得这一缺点逐渐在缩短。由此,java的慢的弊端跟落在了java io上,大家都知道,其实java底层是没有io实现的,而他采用的是一种本地接口的方式,通过C或者C++编译产生的动态链接库进行实现的,原本的io是一种st原创 2013-08-28 23:56:29 · 1289 阅读 · 0 评论 -
java多线程——8 fork/join
硬件的发展趋势非常清晰,每个芯片上会集成更多的内核。很容易想象让十几个处理器繁忙地处理一个粗粒度的任务边界(比如一个用户请求),但是这项技术不会扩大到数千个处理器——在这种环境下短时间内流量可能会呈指数级增长,但最终硬件趋势将会占上风。当跨入多内核时代时,我们需要找到更细粒度的并行性,否则将面临即便有许多工作需要去做而处理器却仍处于空闲的风险。最终,Java 7包含一种框架,用于表示某种更细粒度级原创 2013-08-25 23:30:16 · 3672 阅读 · 0 评论 -
JVM参数调优
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,导致程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是一项极为复杂的过程,由于各个程序具备不同的特点,如:Web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同(主转载 2013-08-24 00:33:30 · 3638 阅读 · 0 评论 -
JVM 参数调优
不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数,可以极大的减少由于GC工作,导致程序运行中断方面的问题,进而适当的提高Java程序的工作效率。但是调整GC是一项极为复杂的过程,由于各个程序具备不同的特点,如:Web和GUI程序就有很大区别(Web可以适当的停顿,但GUI停顿是客户无法接受的),而且由于跑在各个机器上的配置不同(主转载 2013-08-24 00:31:32 · 2930 阅读 · 0 评论 -
Java多线程——7 定时器
定时器,听起来好像很高级的东西,但看一下API,你就会发现定时器(ScheduleExecutorService)其实就是一个Executors多线程框架而已,在Java的第3回中有过一些介绍,我们看一下ScheduleExecutorService的类关系图:介绍一下ScheduledExecutorService的方法schedule(task,delay,unit):安排所提原创 2013-08-23 23:31:58 · 4291 阅读 · 0 评论 -
Java多线程——6 并发流程控制CountDownLatch、CycliBarrier
对于程序中的多线程并发控制,总是有些繁琐,比如,如何让多个线程处于等待状态,又可以有条不紊的运行,或者如何让多个线程如同集会一样开始工作。但作为Java程序员,我们应该感到庆幸,因为java为我们提供一些类,使得原本可能无从下手的问题变得简单,同时也大大的提高了开发的效率。介绍一下允许对多个线程计时使得运行有序的CountDownLatch、CycliBarrier先看一下CountD原创 2013-08-19 23:22:03 · 4395 阅读 · 0 评论