当前位置: 首页 > news >正文

母鸡----------

1. 反射,在程序运行时可以动态的创建对象,获取修改类属性等。性能差,安全性低。

2. io模型,五种io模型(阻塞io,非阻塞io,多路复用io,信号驱动io,异步io),内核态和用户态的概念。io分为磁盘io和网络ip(socket之间传输数据)

bio(同步阻塞io模型,服务器实现模式为一个连 接一个线程,即客户端有连接请求时服务器端就需要启 动一个线程进行处理,传统的socket通信模型,以流的方式处理数据)

nio(非阻塞io模型,一个线程处理多个请求(连接),即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求就进行处理。基于 Channel(通道)和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道的事件(比如:连接请求,数据到达等) )

3. netty:Netty 是基于 Java NIO 的异步、事件驱动的网络应用框架。用于快速开发可维护的高性能协议服务器和客户端。线程模型,server工作流程,优势(封装易用api,性能(多),零拷贝,支持多种高性能序列化协议),零拷贝(可直接使用堆外内存,组合多个buffer对象合并一个逻辑对象,避免使用内存拷贝的方式去合并buffer)

4. tcp/ip,三次握手,四次挥手

5. mqtt(消息队列遥测传输协议,轻量级发币订阅模型,tcp协议,适用于低带宽和不可靠网络环境,优点是数据实时传输,适用于智能家居,汽车等场景),coap协议(约束应用协议,udp协议,适用于资源受限环境,比如传感器等)

6. 数据结构

7. 并发编程3要素:可见性、原子性、有序性

8. sync(线程同步的关键字,锁升级(偏向锁cas、轻量级锁cas、重量级锁),锁修饰的对象(代码块,类,方法)),lock(接口,和sync锁的区别),volatile(轻量级的同步机制,保证可见性,禁止指令重排)

9. jmm:所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取赋值等)必须在工作内存中进行,首先要将变量从主内存拷贝的自己的工作内存空间,然后对变量进行操作,操作完成后再将变量写回主内存,不能直接操作主内存中的变量

10.cas,乐观锁算法,先比较并替换,有aba问题,可以增加一个版本号,在读取内存值的时候,和version一起读出来,判断值的时候,内存值和version一起判断,只有都相同了,才能替换值。

11.threadlocal,存放线程内共享的变量数据,在程序里,可以在拦截器中存放用户信息,然后再系统中可以无参数获取用户信息。在连接池中,可以使用threadlocal存放connection,可以实现同一个线程操作的都是同一个连接。原理是内部有ThreadLocalMap内部类, k-v结构,k是当前ThreadLocal对象。有内存泄露问题,因为是弱引用,k能被回收,但是value不会被回收,解决方法是使用完成的时候,调用remove方法。

12.线程池。使用线程池的优点,复用线程,创建和销毁线程开销大,管理并发数,防止线程无限制创建导致oom等。 jdk提供的线程池(比如newFixedThreadPool线程池,底层存储任务的队列是linkedBlockingQueue,在不设置容量的时候,是无阻塞的阻塞队列,在资源有限的情况下导致内存溢出),自定义线程池(7个参数),线程池的处理流程(创建核心线程处理-存放任务队列-创建非核心线程-执行拒绝策略),如何配置线程池(CPU密集型任务,cpu使用多,防止cpu切换多,cpu核心数+1,IO密集型任务,cpu使用少,cpu*2,让cpu空闲去处理其他任务),提交方法(execute,没返回值和submit,有返回值future)

13 并发容器:hashMap的底层原理(键值对可以为null,线程不安全的原因,两个key hash后到同一个桶,会发生值的覆盖),ConcurrentHashMap(1.7和1.8的区别(1.7数据结构采用数组(Segment) + 数组(HashEntry) + 链表(HashEntry节点),使用Segment分段锁,锁住其中一个桶,锁粒度较小,1.8数据结构采用node++链表 / 红黑树, 使用cas+sync锁,锁只锁在链表或者红黑树的首节点,锁的粒度更小),扩容(默认16,扩容因子0.75,扩容是原长度*2),键值对不能为null) , CopyOnWriteArrayList(线程安全的 List 实现,采用写时复制,当addsetremove 等操作,不会直接修改原数组,而是会先创建底层数组的副本,对副本数组进行修改,修改完之后再将修改后的数组赋值回去,写操作开销大。读不加锁,适用于读多写少的场景)

14. jvm内存区域(即运行时数据区,包括程序计数器、本地方法栈、虚拟机栈、方法区、堆)jvm原理(class文件经过类加载器加载到运行时数据区,执行引擎将class翻译成cpu可执行的指令,同时还需要调用本地库接口去完成整个功能)

15.垃圾回收机制(垃圾回收分为两个阶段:标记(引用计数算法,根可达性分析算法)、清除。垃圾回收算法:标记清除(内存空间碎片)、复制、标记整理。年轻代和老年代的特点)

16 垃圾回收器(分为单核(Serial/Serial old),多核环境下(Parallel Scavenge+Parallel Old),和新生代(ParNew)和老年代(cms(目的是stop the world时间尽量少,吞吐量优先,采用标记-清除算法)属于老年代))新生代采用复制算法,老年代使用标记整理算法。jdk9默认使用G1收集器(标记整理算法,不在物理上区分新生代和老年代,建立可预测的停顿时间,对各个Region中的回收价值和成本进行排序,根据用户所期望的GC 停顿是时间来制定回收计划)

17 堆栈信息追踪(jstack可以查看线程的栈情况,jmap可以导出堆信息,使用使用VisualVM、mat等堆栈分析工具),jvm调优(目的是减少full gc的时间和频率。出现OutOfMemory 等内存异常,系统吞吐量与响应性能不高或下降,Full GC 次数频繁可考虑优化jvm。程序在启动的时候加上打印gc日志(-XX:+PrintGCDetails),或者使用jmap查看导出堆栈信息,查看gc频率和耗时决定是否优化。修改JVM堆初始和最大内存,修改年轻代和老年代的大小比例,修改垃圾回收器。同时优化代码(比如减少使用全局变量和大对象)和架构)

18.mysql数据库存储引擎:数据库文件的一种存取机制,如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法。主要有两种,InnoDB(5.7为默认的存储引擎,支持事务、外键、行锁,适合高并发,缺点是是读写效率较差,占用的数据空间相对较大)和MyISAM(5.5以前为默认的,优点是处理速度快,占用空间小,缺点是不支持事务的完整性和并发性)。

19.mysql索引:索引是一种对数据库表中一列或多列的值进行排序的一种数据结构,可以提高查询速度。根本原因就在于索引减少了查询过程中的IO次数。索引种类(hash索引,b+索引),使用b+树而不用b树的理由:b+树数据只存在于叶子节点,b树是每个节点都存数据,在相同大小的页上,b+树能存的数据越多,树的高度就低,减少磁盘io。b+树的叶子节点有指针进行连接,适合遍历。失效的场景。回表概念。

20.mysql事务:概念,四个特征acid(原子性(redo,undo日志)、持久性、隔离性、一致性),并发事务读操作产生的问题(脏读,不可重复读,幻读),事务的隔离级别

21.mvcc,多版本并发控制,解决读写冲突的无锁并发控制,提高数据库并发。读写通过mvcc不加锁解决,写写加锁。mvcc依赖于两个隐藏字段、undolog,read view来实现。每个记录都有两个隐藏字段,一个是最近修改记录的事务id;回滚指针,用于配合undo日志,指向上一个旧版本。undolog回滚日志(记录修改前的内容),read view在事务执行select的时候会生成读视图,会记录活跃的事务id列表,列表中最小的事务id,系统即将分配到的下一个事务id。要被修改的数据的最新记录中的DB_TRX_ID(当前事务id)和read view进行比较,来判断当前事务能看到的数据。快照读和当前读,rc是每次快照读都会生成最新的read view,rr下是第一次读生成一个read view。在innodb中,通过mvcc可以解决脏读和不可重复读,通过mvcc+间隙锁解决幻读问题(具体查看语雀)。

22.锁:锁的分类(乐观锁(需要自己去实现),悲观锁;共享锁,排它锁;按照粒度分,表锁,行锁)。 行锁是基于索引的,没用索引的话,是使用表锁的。innodb可以根据sql语句隐形加锁,也可以写代码时,显示加锁。select for update,加的是排它锁,其他事务需要等待锁释放才能加锁,读取的是最新的数据,只有自己的事务能修改记录。select  in share mode  ,加的是共享锁,其他事务不能加排它锁修改数据,保证读的是最新的数据,不允许其他人修改。  死锁(设置锁等待超时参数 innodb_lock_wait_timeout 来解决,当一个事务等待时间超过设置的阈值时,就将其回滚)

23.sql优化,慢查询

24.主从,mha

25.分布式锁

26.分布式事务

27.负载均衡

28.限流


http://www.mrgr.cn/news/49768.html

相关文章:

  • 行星滚柱丝杠的特点
  • PHP政务招商系统——高效连接共筑发展蓝图
  • 变频器定位功能块(第三方功能块调试记录+代码)
  • oracle中的exists 和not exists 用法
  • sql-labs靶场第十一关测试报告
  • RPA与传统的Robot Framework、Selenium的差异:未来主流之争
  • 77. 样条曲线
  • ChatGPT 中文版镜像网站整理合集(2024/10/14)
  • SpringBoot构建的健康管理推荐引擎
  • 【流计算】数据采集:web应用如何抗住大量tcp连接与高并发
  • 49 | 桥接模式:如何实现支持不同类型和渠道的消息推送系统?
  • 智谱AI视频通话API【GLM-4-Plus-VideoCall】开放申请
  • 基坑气膜:为清洁施工提供强力保障—轻空间
  • CentOS设置IP地址
  • Android 10.0 滑动解锁流程
  • 基础篇:带你打开Vue的大门(一)
  • #10234-D unresolved symbols remain 问题解决方法
  • 免费版视频压缩软件:让视频处理更便捷
  • 了解 Python 的 __repr__ 方法
  • DMN决策引擎入门知识点