学习笔记
GxDong_
这个作者很懒,什么都没留下…
展开
-
[Top-K] 海量数据的Top-K问题/出现频率Top-K问题
描述最近在面试中有被问到,Top-K的相关问题,在此做以总结,希望对后续面试的小伙伴有帮助题目要素1.海量数据(大数量,小内存)2.排名前K变体:海量数据的词频问题例子先举一个比较有趣的例子。已知现在有25匹马,5条赛道,假设不考虑马的疲劳问题,不可以使用计时器记录每一匹马的时间。最少需要多少次比赛才能选出25匹马中的TOP3。答案:7次思路:❗ 解决此类问题,脑海中一定要从哪些马没有资格成为TOP3的思想出发。首先,对25匹马进行5次比赛,淘汰每一组中排名靠后的两匹马,因为这些原创 2021-03-25 21:21:23 · 773 阅读 · 0 评论 -
[Java] 多线程中的信号量与操作系统中的信号量
信号量在面试中被问到,操作系统的信号量,觉得回答的不是很好,查了些资料,将操作系统中的信号量及JUC下的信号量概念进行比较。操作系统中的信号量操作系统中的信号量主要负责进程间的信息同步 ,可以理解为常说的进程间通信。其本质上就是一个计数器 通过操作系统的P(上锁),V(释放锁)操作。在理解信号量的之前需要先理解临界资源 及 临界区临界资源临界资源:具有排他性的资源。可以理解为Java中的需要各个线程间增强的资源,在操作系统中等价于各个进程需要统一维护的一个变量。临界区临界区:访问临近资源的代码原创 2021-03-23 11:05:45 · 406 阅读 · 0 评论 -
[Java] 阻塞队列的实现原理
阻塞队列的实现原理核心: lock锁+多条件(condition)的阻塞控制Java中的阻塞队列使用BlockingQueue封装了根据condition条件阻塞线程的过程,使得我们不需要求关系繁琐的await和signal操作。以生产消费者模式举例,使用阻塞队列可以不关系什么时候阻塞生产,什么时候阻塞消费。实现: 各个阻塞队列都实现了BlockingQueue接口常用阻塞队列:ArrayBlockingQueue:是一个用数组实现的、有界的阻塞队列,其内部实现是将对象放到一个数组里。有界也原创 2021-03-23 10:11:08 · 406 阅读 · 0 评论 -
[分布式锁] 分布式锁的使用场景
分布式锁为了解决分布式场景下全局加锁的问题。在单体项目中可以使用synchronize完成对于不同线程之间的资源争抢问题。但是在分布式场景下,synchronize只能对其中一个项目进行资源控制,进程之间的资源增强仍然无法解距。换言之,可以将分布式锁理解为对于整个分不是系统的synchronize。通常使用独立与线程之外的工具控制资源,如redis及框架redisson。1.传统单体架构业务流程synchronized(this){ /** 业务逻辑扣减库存 */}以上代码对于单体架构可原创 2021-02-24 14:05:31 · 1739 阅读 · 0 评论 -
[MyCat] 一文读懂MyCat
MyCatMyCat是一种数据库中间件,一端连接Java应用,一端连接数据库集群。使用对Mycat的配置完成对于数据库集群的管理,完成读写分离、数据分片(分库分表)、多数据源整合。原理拦截,拦截用户的sql语句,为sql语句查询指定数据源,并返回结果。登录Mycatmysql -umycat -p1223456 -p 8066 -h 192.168.0.1垂直拆分(分库)根据业务在mycat上配置哪个数据库在哪个机器上。水平拆分(分表)分库后将一张表在多台数据库上拆分,一般根据某个字段原创 2021-02-23 14:25:32 · 130 阅读 · 0 评论 -
[Netty]bind方法源码分析
服务器在bind方法中完成初始化,核心方法为doBind方法,该方法主要完成执行initAndRegister方法执行doBind方法initAndRegister使用channelFactory.newChannel()方法反射创建一个NIOServerSocketChannel对象,同时创建了一个NioServerSocketChannelConfig对象。对NioServerSocketChannelConfig调用init方法完成初始化2.1 init方法设置NioServer原创 2021-01-11 21:12:18 · 140 阅读 · 0 评论 -
[Netty] 使用Netty实现webSocket服务端
使用Netty实现WebSocket的服务端部分服务端代码import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelPipeline;import io.netty.channel.EventLoopGroup;import io.netty.c原创 2021-01-07 15:48:06 · 336 阅读 · 0 评论 -
[Netty] Netty心跳检测
Netty进行心跳检测的方法有很多,本文主要介绍通过Netty提供的idleStateHandler完成心跳检测IdleStateHandlerIdleStateHandler是Netty提供的专门用于处理空闲状态的处理器三个参数:1. readerIdleTIme 表示多长时间没有读了,就会发送一个心跳检测包,检测是否还是连接状态2. readerIdleTime 表示多长时间没有写了,就会发送一个心跳检测包,检测是否还是连接状态3. allIdleTIme 表示多长时间没有读写了,就会原创 2021-01-06 20:35:25 · 344 阅读 · 1 评论 -
[Netty] 基于Netty的简单群聊系统
功能使用Netty实现简单的群聊系统检测各个客户端的上线和下线;将客户端的数据分别推送到其他客户端代码服务端代码import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelInitializer;import io.netty.channel.ChannelOption;import io.netty.channel.Cha原创 2021-01-06 15:02:06 · 214 阅读 · 1 评论 -
[Netty] Bytebuf
Unpooled类是Netty提供的一个专门用于操作Netty数据容器的工具类Bytebuf创建一个Bytebuf对象,该对象包含一个byte[] 数组,在Netty的ByteBuf中不需要使用lip进行反转,也可完成读写操作Bytebuf使用了readIndex和writeIndex保存读取和写入的索引/*** 创建一个ByteBuf */ ByteBuf buffer = Unpooled.buffer(); for (int i = 0; i < 10; i++) {原创 2021-01-04 20:35:39 · 149 阅读 · 0 评论 -
[Netty] ChannelHandlerContext详解
ChannelHandlerContext组件ChannelHandlerContext常叫ctx。ChannelHandlerContext里就包含着ChannelHandler中的上下文信息,每一个ChannelHandler被添加都ChannelPipeline中都会创建一个与其对应的ChannelHandlerContext。ChannelHandlerContext的功能就是用来管理它所关联的ChannelHandler和在同一个ChannelPipeline中ChannelHandler的原创 2020-12-30 17:32:14 · 2526 阅读 · 0 评论 -
[Netty] Netty案例——基于Netty的HTTP请求
使用Netty实现HTTP请求使用Netty编写服务端,使用浏览器模拟HTTP请求,访问服务端。服务端返回的数据在浏览器显示。服务端代码import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.原创 2020-12-28 21:49:38 · 1765 阅读 · 0 评论 -
[Netty] Netty的Task及Future机制
Netty的Task的3中典型应用场景用户程序自定义的普通任务用户自定义定时任务非当前Reactor线程调用Channel的各种方法Netty框架中NIOEventGroup中的EventLoop中的TaskQueue中处理任务1. 用户程序自定义的普通任务ctx.channel().eventLoop().execute(new Runnable(){ @Override public void run(){ // 用户定义的特定任务 }})对于队列中的多个任务,顺序执行。原创 2020-12-28 08:52:50 · 263 阅读 · 0 评论 -
[Netty] Netty入门案例TCP连接
通过简单的例子演示Netty进行TCP请求,解释Netty运行的过程使用Maven环境引入Netty依赖<dependencies> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.43.Final</version>原创 2020-12-26 12:36:11 · 339 阅读 · 0 评论 -
[Java] Java自学笔记(十一)——网络编程
*网络编程 ·在一定的协议下,实现两台计算机的通信的程序 ·软件结构 ·C/S 客户端服务器 ·B/S 浏览器服务器*网络通信协议 ·TCP/IP ·定义了计算机如何接入因特网以及数据如何在他们之间传输的标准 ·应用层:HTTP... ·传输层:TCP UDP ·网...原创 2019-08-20 15:03:39 · 188 阅读 · 0 评论 -
[Java] Java自学笔记(十)——线程
*线程 ·进程 操作系统运行的一个程序 ·线程 进程的一个执行单元或执行路径 一个进程至少有一个线程,当有多个线程时成为多线程进程,每一个线程都有一个栈 所有线程共享堆区和方法区 ·主线程 Java虚拟机启动主线程运行,main方法 ·用户线程 开启的新的线程,也成子线程...原创 2019-08-16 14:00:57 · 139 阅读 · 0 评论 -
[Java] Java自学笔记(九)——IO流
*IO流 ·输出/输出流 ·输出:把程序的内容保存到外面 ·输入:从程序外读取数据 ·字节流/字符流 ·字节流:以字节为单位处理数据 ·字符流:以字符为单位处理数据 ·节点流/处理流 ·节点流:直接从设备(数据源)上读写数据 ·处理流:对节点流的包装*文件读写需要使用IO流...原创 2019-08-15 10:55:08 · 173 阅读 · 0 评论 -
[Java] Java自学笔记(八)——集合
*集合 ·集合使用来存储引用类型数据的容器*Collection 集合 ·存取数据时单个存取,可以迭代(顺序访问集合中的每一个元素并只访问一次) ·子接口List集合:有序可重复(存储数据和添加顺序一致) ·实现类ArrayList底层是数组,线程不安全 ·实现类Vector底层是数组,是线程安全的 ...原创 2019-08-12 17:30:36 · 161 阅读 · 0 评论 -
[Java] Java自学笔记(七)——常用类
*常用类*与字符串相关的类 *String类 java.lang.String类表示字符串的类 *常用方法 ·chatAt(int index)返回指定位置的字符 ·compareTo(String anotherString)字符串的大小比较 ·根据字符串第一个不相等的字符进行码值相减 ...原创 2019-08-12 10:02:09 · 131 阅读 · 0 评论 -
[STM32] STM32自学笔记(三)——ADC&中断&串口
*ADC ·ADC通道 规则通道、注入通道 ·ADC执行模式 单次、连续、扫描、间断 ·单次转换 一个通道转换完成后标志位置位可以产生中断 ·连续转换 设置的连续数目转换完成后标志位置位产生中断 ·扫描模式 一次转换,最后一个通道转换完成后标志位置位产生中断*中断 ·...原创 2019-07-23 09:48:24 · 1864 阅读 · 0 评论 -
[STM32] STM32自学笔记(二)——时钟系统
*时钟系统 ·5个时钟源 ·HSI 高速内部时钟(RC振荡器)不稳定 ·HSE 高速外部时钟(外部晶振)8MHz ·LSE 低速外部时钟(外部晶振)32.768KHz ·LSI 低速内部时钟(≈40KHz) ·PLL 锁相环倍频输出时钟 ·系统时钟的3个来源 ...原创 2019-07-17 12:57:05 · 270 阅读 · 0 评论 -
[STM32] STM32自学笔记(一)——GPIO
*GPIO_I/O口 ·4种输入 ·浮空输入模式 ·输入上拉模式 ·输入下拉模式 ·模拟输入模式(AD转换) ·4种输出 ·开漏输出模式 只可以输出强低电平,适合做电流型驱动 ·开路复用输出模式 ·推挽输出模式 可输出强高地...原创 2019-07-13 16:57:09 · 336 阅读 · 0 评论 -
[Java] Java自学笔记(六)——数组
*一维数组的定义与访问 ·定义 数据类型 [] 数组名 = new 数据类型[数组长度]; ·数据类型就是数组中存储元素的数据类型 ·方括号就是定义的数组 ·数组名其实就是一个变量名,保存是数组的引用(数组的起始地址) ·new 运算符会在堆中分配一块连续的存储空间,把这块连续的...原创 2019-07-09 16:05:14 · 235 阅读 · 0 评论 -
[Java] Java自学笔记(五)——异常
*异常 ·异常就是程序运行过程中出现了不正常现象导致程序中断 ·在Java中,把各种异常现象进行了抽象形成了异常类*异常处理 ·运行时异常不需要预处理,通过规范的代码可以避免 ·受检异常必须预处理,否则编译报错,有两种预处理方法 ·捕获处理 ·抛出处理*捕获处理 try{ 对可能产生异常的代码进行检视...原创 2019-06-18 17:02:37 · 130 阅读 · 0 评论 -
[Netty] Netty概述
原生NIO问题NIO的类库的API繁杂,使用麻烦。开发工作量大,需要if判断不同的情况,如网络断开等情况需要重复处理。NIO存在Epoll Bug 导致选择器空轮空Nettynetty是一个异步的基于事件驱动的网络应用框架,快速的开发高性能的service和clientsNetty支撑多种协议https://netty.io/index.html建构设计线程模型目前存在的线程模型:传统阻塞IO模型Reactor模式根据Reactor的数量和处理资源池线程的数量的不同又原创 2020-12-21 21:08:10 · 169 阅读 · 0 评论 -
[Netty] NIO和零拷贝
零拷贝指不发生CPU拷贝传统IO经历了4次拷贝、三次上下文切换4次拷贝:DMA(直接内存拷贝)拷贝到内核bufferCPU拷贝到用户Buffer—用户进行修改操作—CPU拷贝到SocketBufferDMA拷贝到协议栈mmap内存映射优化经历了3次拷贝、3次上下文切换(内核缓冲和User缓冲共享数据)三次拷贝DMA(直接内存拷贝)CPU拷贝—用户进行修改操作—DMA拷贝到协议栈sendFile优化(Linux 2.1)经历了3次拷贝、2次上下文切换(数据不经过用原创 2020-12-20 22:18:10 · 259 阅读 · 0 评论 -
[Netty] 基于NIO的简单群聊系统
介绍基于Netty的后端群聊系统,实现的功能有监听客户端的上线和下线、监听客户端的消息的发送代码服务端package com.gxd.nio.groupchat;import jdk.nashorn.internal.ir.annotations.Ignore;import org.omg.CORBA.IRObject;import java.io.IOException;import java.net.InetSocketAddress;import java.net.So原创 2020-12-20 15:15:36 · 141 阅读 · 0 评论 -
[Netty] Selector选择器
选择器介绍Selector能够同时检测对个注册的通道上是否有事件发生多个Channel以事件的方式注册到同一个Selector。如果有事件发生,就获取事件,然后对事件进行处理,只使用一个线程就管理了多个通道。只有在一个通道真正有读写事件时,才会执行。Selector、SelectionKey、ServerSocketChannel和SocketChannel的关系当客户端连接时,会通过ServerSocketChannel得到SocketChannel将SocketChannel注原创 2020-12-17 22:44:43 · 394 阅读 · 0 评论 -
[Netty] MappedByteBuffer、Buffer的分散和聚集
MappedByteBuffer的使用介绍使用MappedByteBuffer可以不在内存中将文件修改,使用堆外内存,不需要将文件进行而外的拷贝。是一个操作系统级别的文件修改代码 public static void main(String[] args) throws Exception { RandomAccessFile randomAccessFile = new RandomAccessFile("1.txt","rw"); // 获取对应通原创 2020-12-15 21:23:07 · 293 阅读 · 0 评论