typora美化
幕布+typora自动生成思维导图哔哩哔哩的指导视频
https://www.bilibili.com/video/av969076674
pandoc下载
https://pandoc.org/installing.html
https://blog.csdn.net/qq_43741748/article/details/105454719
幕布
https://mubu.com/apps
java集合-Collection和Map
一、概述数组的弊端
一旦初始化以后,其长度就不可修改。
数组中提供的方法非常限,对于添加、删除、插入数据等操作,非常不便,同时效率不高。
获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足。
集合概述容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表
Collection接口:单列数据,定义了存取一组对象的方法的集合
List:元素有序、可重复的集合
Set:元素无序、不可重复的集合
Map接口:双列数据,保存具有映射关系“key-value对”的集合
Collection
Collection:单列集合
常用方法123add(Object obj),addAll(Collection coll),size(),isEmpty(),clear();contains(Object obj),containsAll(Collection coll),remove(Object obj), ...
Netty-Netty源码
在 io.netty.example 包下,有很多Netty源码案例,可以用来分析
Netty 启动过程源码剖析Netty 调用doBind方法, 追踪到 NioServerSocketChannel的doBind并且要Debug 程序到 NioEventLoop类 的run代码 ,无限循环,在服务器端运行。
剑指offer
所有题按照leetcode
JZ3 数组中重复数字数组中重复的数字
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
123输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3
1.遍历数组
123456789Set<Integer> set = new HashSet<>();int repeat = -1;for (int num : nums) { if (!set.add(num)){ repeat = num; break; }}return repeat;
2.先排序在查找
12345678public int findRepeatNumber(int[] nums) { Arrays.sort(nums); for (int i = 1; i < nums.length; i++) ...
Netty-Netty进阶
Netty 核心模块组件Bootstrap、ServerBootstrapBootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类
常见的方法有
123456789public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup),该方法用于服务器端,用来设置两个 EventLooppublic B group(EventLoopGroup group) ,该方法用于客户端,用来设置一个 EventLooppublic B channel(Class<? extends C> channelClass),该方法用来设置一个服务器端的通道实现public <T> B option(ChannelOption<T> option, T value),用来给 ...
Netty-Netty入门
NIO存在的问题
NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。
开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。
JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU 100%。直到 JDK 1.7 版本该问题仍旧存在,没有被根本解决。
Netty
Netty 可以帮助你快速、简单的开发出一个网络应用,相当于简化和流程化了 NIO 的开发过程
Netty 是目前最流行的 NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,知名的 Elasticsearch 、Dubbo 框架内部都采用了 Netty
netty 下载地址: ...
设计模式-代理模式
代理模式(Proxy)代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象
代理模式有不同的形式, 主要有三种 静态代理、动态代理 (JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴) 。
静态代理静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同父类
抽象角色:通过接口或抽象类声明真实角色实现的业务方法。
代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。
真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
接口类
123public interface ITeacherDao { void teach();}
创建目标对象和代理对象
1234567891011 ...
Netty-NIO
Netty简介Netty是一个异步、基于事件驱动的网络应用框架。主要针对在TCP协议下面向Client端的高并发应用。是一个NIO框架,适用于服务器。
应用场景
分布式系统中各节点远程过程调用(RPC:Dubbo)
游戏服务器
Hadoop通信
I/O模型用什么样的通道进行数据的发送和接收
BIO:同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销
NIO:同步非阻塞,服务器实现模式为一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理
AIO:异步非阻塞,AIO 引入异步通道的概念,采用了 Proactor 模式,简化了程序编写,有效的请求才启动线程,它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。(没有得到应用)
BIO、NIO、AIO适用场景BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK ...
设计模式-工厂模式
简单工厂模式
简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式
简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式.
1.创建产品接口和对象
12345678910111213public interface Product { //共同的方法}public class ProductA implements Product { public ProductA(){ System.out.println("ProductA"); }}public class ProductB implements Product { public ProductB(){ System.out.println("ProductB&qu ...
算法
分治算法把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……
二分搜索
大整数乘法
棋盘覆盖
合并排序
快速排序
线性时间选择
最接近点对问题
循环赛日程表
汉诺塔
分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题 合并:将各个子问题的解合并为原问题的解。
汉诺塔如果是有一个盘, A->C如果我们有 n >= 2 情况,我们总是可以看做是两个盘 1.最下边的盘 2. 上面的盘
先把 最上面的盘 A->B
把最下边的盘 A->C
把B塔的所有盘 从 B->C
123456789101112public static void hanoiTower(int num,char a ,char b, char c){ if (num == ...