-
MySQL 数据库的性能优化方法有哪些?
MySQL 数据库的性能优化方法有哪些?回答重点对开发而言,一般可以从 SQL 和库表设计两部分优化 MySQL 性能问题。 SQL 优化根据慢 SQL 日志,找出需要优化的一些语句。 常见优化方向: 1)避免 SELECT *,只查询必要的字段 2)避免在 SQL 中进行函数计算等操作,使得无法命中索引 3)避免使用 %LIKE,导致全表扫描 4)注意联合索引需满足最左匹配原则 5)不要对... -
什么是数据库的逻辑删除?数据库的物理删除和逻辑删除有什么区别?
什么是数据库的逻辑删除?数据库的物理删除和逻辑删除有什么区别?回答重点逻辑删除是一种将数据标记为已删除但实际不会从数据库中移除的删除方式。一般是在表中添加一个表示删除状态的字段,如 is_deleted ,默认是 0 表示未删除,1 表示已删除。 物理删除则是直接从数据库中删除记录。 一般业务上都是使用逻辑删除,便于后续的数据分析、追溯等。 扩展知识物理删除的优缺点优点: 节省存储空间:物... -
什么是数据库的逻辑外键?数据库的物理外键和逻辑外键各有什么优缺点?
什么是数据库的逻辑外键?数据库的物理外键和逻辑外键各有什么优缺点?回答重点逻辑外键是一种在应用程序层面上管理和维护数据完整性的方法,而不是通过数据库本身的外键约束。主要是利用应用程序代码来保证引用的完整性。 逻辑外键的优缺点优点: 灵活性高:应用程序层面控制,可以更灵活地实现复杂的业务逻辑。 性能优化:避免了数据库层面的约束检查,可以在某些情况下提高性能(详细看扩展知识)。 跨数据库兼容性... -
什么是 Netty,它在网络编程中解决了什么问题?
什么是 Netty,它在网络编程中解决了什么问题?回答重点Netty 是高性能 Java 网络通信的底层框架,它使用异步、事件驱动等架构,解决了传统 Java 网络编程中的一些复杂问题: 传统BIO阻塞瓶颈:通过NIO多路复用实现单线程万级连接,避免线程爆炸 原生NIO开发复杂度:封装Selector/Channel/Buffer,提供Pipeline责任链式API 网... -
说说你知道的几种 I/O 模型
说说你知道的几种 I/O 模型回答重点1)同步阻塞 I/O(Blocking I/O,BIO) 线程调用 read 时,如果数据还未到来,线程会一直阻塞等待;数据从网卡到内核,再从内核拷贝到用户空间,这两个拷贝过程都为阻塞操作。 优点:实现简单,逻辑直观;调用后直接等待数据就绪。 缺点:每个连接都需要一个线程,即使没有数据到达,线程也会被占用,导致... -
介绍一下 Reactor 线程模型?
介绍一下 Reactor 线程模型?回答重点Reactor 是服务端在网络编程时的一个编程模式,主要由一个基于 Selector (底层是 select/poll/epoll)的死循环线程,也称为 Reactor 线程。 基于事件驱动,将 I/O 操作抽象成不同的事件,每个事件都配置对应的回调函数,由 Selector 监听连接上事件的发生,再进行分发调用相应的... -
为什么不选择使用原生的 NIO 而选择使用 Netty 呢?
为什么不选择使用原生的 NIO 而选择使用 Netty 呢?回答重点因为原生的 NIO 存在一些问题: 1)原生 NIO 接口较多,能支持更精细化的调用,但是对于通常的使用而言过于复杂。就好下面这张图,对于已经深耕的专业人员来说,可能极好,但对于大部分人员使用来说太复杂了。 所以如果用原生 NIO 开发的话,需要进行二次封装,开发效率不高,且原生 NIO 对开发者要求较高,不好开发。 2... -
Netty 性能为什么这么高?
Netty 性能为什么这么高?回答重点Netty 性能高的主要原因如下: 非阻塞 I/O 模型:Netty 底层使用了 NIO 非阻塞模型,并且利用I/O 多路复用,通过 Selector 监听多个 Channel 的 IO 事件,使得系统资源得到了充分利用,减少了线程开销。 高效的内存操作与内存池设计:ByteBuf 提供了丰富的功能,如动态扩展、复合缓冲区等,能高效... -
说一下 TCP 半包和粘包问题?
说一下 TCP 半包和粘包问题?回答重点因为TCP 协议是面向字节流的,数据在传输过程中没有明确的边界,所以会发生粘包和半包问题。 1)粘包问题: 粘包指的是多个应用层的数据包在传输过程中被合并成一个 TCP 数据包,导致接收方无法区分各个独立的数据包。 2)半包问题: 半包指的是一个应用层的数据包在传输过程中被拆分成多个 TCP 数据包,接收方需要多次读取才能获取完整的数据。 常见解决粘包... -
简单说说 Netty 的线程模型,并且其是如何完成工作的?
简单说说 Netty 的线程模型,并且其是如何完成工作的?回答重点Netty 主要采用了 Reactor 模型,且通过细化线程池管理来处理不同的 I/O 任务。 Netty 的线程模型可以分为三个部分: Boss 线程组:负责接收客户端的连接请求。 Worker 线程组:负责处理 I/O 读写操作。 业务线程组(可选):负责处理具体的业务逻辑。 具体工作机制1)Bos... -
Netty 是如何解决粘包和拆包问题的?
Netty 是如何解决粘包和拆包问题的?回答重点Netty 提供了丰富的自带解码器为我们解决粘包和拆包的问题,也可以让我们自定义序列化解码器。 Netty 自带的解码器 DelimiterBasedFrameDecoder:分隔符解码器,使用特定分隔符来分割消息。 FixedLengthFrameDecoder:固定长度的解码器,可以按照指定长度对消息进行拆包,如果长度不够的话,可以使用空格... -
说一下 Netty 的应用场景?
说一下 Netty 的应用场景?回答重点Netty 的应用场景主要有以下几个: 许多框架底层通信的实现,比如说 RocketMQ、Dubbo、Elasticsearch、Cassandra 等,底层都使用到了 Netty。 游戏行业,在游戏服务器开发中,Netty 用于处理大量并发的游戏客户端连接,提供低延迟的网络通信能力 实现一个通讯系统,比如聊天室、IM 等,处理高并发的实时消息传输。... -
Netty 如何解决 JDK NIO 中的空轮询 Bug?
Netty 如何解决 JDK NIO 中的空轮询 Bug?回答重点Netty 实际上并没有解决 JDK 原生 NIO 中空轮询 bug,而是通过其他途径绕开了这个错误。 具体操作如下: 1)统计空轮询次数:Netty 通过 selectCnt 计数器来统计连续空轮询的次数。每次执行 Selector.select() 方法后,如果发现没有 I/O 事件,selectCnt 就会递增... -
简单说说 Netty 的零拷贝机制?
简单说说 Netty 的零拷贝机制?回答重点 前置知识:零拷贝的基本理念 避免在用户态和内核态之间拷贝数据,从而降低 CPU 占用和内存带宽的消耗。 除了系统层面的零拷贝,Netty 还强调在 buffer 之间避免不必要的数据拷贝。 Netty 中的零拷贝包括以下四个方面: 零拷贝机制 描述 FileRegion 接口 利用操作系统的 sendfile 系统调用,将文... -
Netty 采用了哪些设计模式?
Netty 采用了哪些设计模式?回答重点Netty 作为许多中间件的底层网络通讯框架,内部设计使用了很多的设计模式: 1)策略模式 例如,Netty 提供了多种 EventLoopGroup 实现(如 NioEventLoopGroup、EpollEventLoopGroup),可以根据不同的操作系统和需求选择不同的实现。 2)单例模式 我们在面试鸭设计模式题库中提到池化设计经常就需要用到单... -
在 Netty 中,什么是 Channel ? 什么是 ChannelHandlerContext?
在 Netty 中,什么是 Channel ? 什么是 ChannelHandlerContext?回答重点在 Netty 中,Channel 表示一个网络连接,抽象了底层的网络操作,提供绑定、连接、读写和关闭等操作,是网络 I/O 操作的核心抽象。 ChannelHandlerContext 是 Netty 中用来在 ChannelPipeline 中传递数据和处理事件的上下文对... -
稻盛和夫:赚钱最快的四条路,从未改变
稻盛和夫说: “赚钱最快的四条路。从未改变。 第一、信息差,即我知道的,你不知道。 第二、认知差,即指我懂的,你不懂。 第三、执行差,即你我都懂,但你不做我做。 第四、竞争差,即你我都懂,你我都做,但我做得比你好。” 稻盛和夫所述的四种赚钱之路,实则是人生进阶的四种智慧。这不仅仅是关于财富的积累,更是关于心灵的升华和智慧的沉淀。 “信息差,即我知道的,你不知道。”这便是第一条道路。 世间万物... -
赚钱,无非这5种途径:信息差、认知差、执行差、竞争差、资源差
要想赚钱,就一定要找到搞钱的路子。如果路子都选择不正确,那你注定是穷人。赚钱,无非以下这5大途径,就看你能领悟哪一条。 一:靠信息差赚钱信息差,简单来说,就是你知道的别人不知道,你会的东西别人不会,你掌握的信息别人还在搜索。这种观点可能会让人感到不舒服,觉得利用他人的无知来赚钱不道德。但让我们暂时抛开道德判断,从客观的角度来看这个现象。在现实生活中,信息差无处不在:当你去餐厅吃饭时,厨师知... -
6.有关float精度问题
先来引入一个问题
1
System.err.println(9990000110F<=9990000000F);
运行结果是: true
然后你的问题就来了,这个是谁大呢?
-
关于我
联系方式 手机: Email: 微信: 个人信息 魏先生/男/1990年 本科/计算机科学与技术 技术博客:http://blog.weiyuanbiao.cn/ 荣誉奖励:获得了什么奖(获奖时间) Github:https://github.com/Snailclimb Github Resume: http://resume.github.io/... -
tags
国学 -
ThreadLocal原理
ThreadLocal
ThreadLocal简介
通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中提供的
ThreadLocal类正是为了解决这样的问题。ThreadLocal类主要解决的就是让每个线程绑定自己的值,可以将ThreadLocal类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。如果你创建了一个
ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的本地副本,这也是ThreadLocal变量名的由来。他们可以使用get()和set()方法来获取默认值或将其值更改为当前线程所存的副本的值,从而避免了线程安全问题。 -
12.字节码的初步认识,来自i=i++,i=++i原理分析
首先来代码:
1
2
3
4
5
6
7public class TestPlusPlus {
public static void main(String[] args) {
int i = 0;
i++;
System.err.println(i);
}
}然后执行 javap -c TestPlusPlus
-
11.mybatis原理分析
mybatis运行流程sql封装流程结果集绑定方式注意问题 -
10.二叉树.B+树.红黑树等各种树
树的简介二叉树B树B+树红黑树