随笔分类 - Java
摘要:Given a non-negative integer n, count all numbers with unique digits, x, where 0 ≤ x < 10n. Example: Input: 2 Output: 91 Explanation: The answer shoul
阅读全文
摘要:布隆过滤器 布隆过滤器主要用于判断一个元素是否在一个集合中,它可以使用一个位数组简洁的表示一个数组。它的空间效率和查询时间远远超过一般的算法,但是它存在一定的误判的概率,适用于容忍误判的场景。如果布隆过滤器判断元素存在于一个集合中,那么大概率是存在在集合中,如果它判断元素不存在一个集合中,那么一定不
阅读全文
摘要:inBound事件 当发生某个IO事件的时候,例如链路建立,链路关闭,读取操作完成(register,read,active)等,都会产生一个事件,事件在pipeline中传播和处理。pipeline中以fireXXX命名的方法都是从IO线程向用户业务Handler的inBound事件,它们的实现因
阅读全文
摘要:https://juejin.im/entry/596343686fb9a06bbd6f888c
阅读全文
摘要:1.饿汉式 如果主动使用Singleton类,instance实例将直接完成创建,包括其中的实例变量都会得到初始化,但是instance可能被加载很长一段时间后才被使用,instance实例开辟的堆内存会驻留更久的时间,如果说一个类的成员变量不多,且占用内存资源较少,可以使用饿汉式,总结它可以保证多
阅读全文
摘要:Java中的Future模式主要是用于等待子线程的返回结果,但是如果一直等待子线程返回值,就会使得主线程阻塞,但其实等待子线程返回值的这段过程中,主线程可以去做其他的事情,不一定要阻塞在原地,Java的Future模式会先返回一个虚拟的结果(假的),主线程可以先去做其他的事情,然后再去获取真实的结果
阅读全文
摘要:ChannelHandler的添加 一般用户会先添加ChannelInitializer这个Handler,通过这个handler获取channel对应的pipeline,将一系列的channelHandler添加到Pipeline上面。主要是通过调用pipeline的addLast方法进行添加。代
阅读全文
摘要:不论是NioServerSocketChannel,还是NioSocketChannel,最终都会调用父类AbstractChannel的构造函数,pipeline也在channel被创建的时候被创建。 而这里是创建了一个DefaultChannelPipeline。构造函数会保存传入的channe
阅读全文
摘要:Netty服务端处理新连接的流程: 1.检测新连接 2.基于NioServerSocketChannel创建客户端的NioSocketChannel 3.分配客户端channel的线程,注册线程所对应的selector 4.向selector注册读事件 新连接检测 服务端在创建完服务端的NioSer
阅读全文
摘要:NioEventLoop启动触发条件: 1.服务端绑定本地端口 2.新连接接入通过chooser绑定一个NioEventLoop 服务端绑定本地端口 绑定本地端口,使用下面方法; 最终会调用doBind0()方法: 这个时候就会调用channel对应NioEventLoop的execute方法,会判
阅读全文
摘要:NioEventLoopGroup的创建 服务端一般是通过创建两个NioEventLoopGroup来创建NioEventLoop,一个NioEventLoopGroup主要是用于接收客户端的请求,另外一个NioEventLoopGroup则是处理网络IO的相关读写操作,或者是执行定时任务,或者是系
阅读全文
摘要:Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area. Example: 题目大意: 求二维矩阵中正方形面积的最大值。 解法:
阅读全文
摘要:代理模式 在代理模式里面,使用代理类控制对目标类的访问,通过代理对象控制对原对象的访问。这里的代理对象其实就是相当于是生活中的中介。 举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还
阅读全文
摘要:Netty服务端启动代码: 1.Channel的创建 通过Bootstrap.bind(PORT)调用AbstractBootstrap.doBind(),doBind()调用initAndRegister()。 从该方法可以看出,channel的创建是依赖channelFactory().newC
阅读全文
摘要:Netty是什么? Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应
阅读全文
摘要:1.继承Thread,并重写run()方法,重写run方法,该方法是线程执行体 2.通过Runable去创建线程,也是重写run方法,该方法是线程执行体 执行结果部分结果: 可以看出线程1和线程2共享了MyRunnable实例对象的i。 3.通过Callable和Future创建线程,通过继承Thr
阅读全文
摘要:1.定义 ReentrantLock是一种可重入锁,允许一个线程对同一个资源重复加锁,如果说是当一个线程调用一个锁的lock()方法,然后再次调用锁的lock()方法,当锁不支持可重入时,该线程会被自己所阻塞。该锁还能支持公平锁和非公平锁的选择,公平的意思就是将锁分配给等待锁时间最长的线程,这样可以
阅读全文
摘要:从Lock接口可以看出,Lock提供了许多synchronized关键字不具备的很多功能。 1.具备了获取锁和释放锁的可操作性,synchronized将锁的获取和释放固化了,一定是先获取再释放。假设存在场景需要先获取锁A,再获取锁B,再对A进行释放,最后再对B进行释放,那么synchronized
阅读全文
摘要:1.定义 ThreadLocal是线程变量,就是说每一个线程都有对应的该变量副本,线程修改该变量时,线程与线程之间的变量是相互隔离的,互相并看不见。这个结构附带在线程上,一个线程可以根据ThreadLocal对象查询到绑定到该线程上的值。 2.主要方法 ThreadLocal的主要方法都是基于Thr
阅读全文
摘要:程序执行结果: 1.使用wait(),notify(),notifyAll()方法之前,要获取同一个对象的锁。 2.调用wait()方法之后,线程会从RUNABLE状态变为WAITING状态,并会释放对象锁,并会将线程移入到对象的等待队列中。 3.notify()和notifyAll()调用之后,等
阅读全文

浙公网安备 33010602011771号