1.操作系统总结 什么是进程调度进程调度的目的是:进程调度是指操作系统决定进程在处理机上运行的顺序和方式,负责为多个进程分配CPU时间并调度它们的运行。进程调度的主要目的是提高处理机的利用率,增加系统的吞吐量和响应速度,提高系统的交互性和并发性,保证系统资源的公平分配。操作系统调度有以下几种常见的策略:1、先来先服务调度(FCFS):按照进程到达系统的先后顺序进行调度,先到先服务。2、最短作业优先调度(SJF):按照进程的运行时间短暂程度排序,最短作业优先调度。
2.Elasticsearch使用优化原理总结 Elasticsearch Mapping 是一种定义索引中文档结构的方式。它描述了每个字段的名称、数据类型、存储方式、索引方式、分析器等属性,帮助 Elasticsearch 了解文档中的数据,从而更好地执行搜索和聚合操作。在 Elasticsearch Mapping 中,可以定义文档中每个字段的数据类型、存储方式、索引方式、分析器等属性。数据类型:字符串、整数、浮点数、布尔值、日期等;存储方式:是否存储源文档、存储方式等;索引方式:是否被索引、索引时采用何种分析器、是否采用倒排索引等;
2.java容器、多线程、JVM、类加载总结 在 Java 中,每个线程都有一个上下文类加载器(Context ClassLoader),可以通过 Thread.getContextClassLoader() 方法获取。上下文类加载器是一种与双亲委托模型无关的类加载器,它可以用来打破双亲委托模型,从而使得某些类可以使用特定的类加载器进行加载,而不受默认的双亲委托规则的限制。通过 Thread.currentThread().setContextClassLoader() 方法可以将上下文类加载器设置为指定的类加载器。
4、Spring & SpringBoot总结 Map<String, Object> singletonObjects: 一级缓存,也就是我们平常理解的单例池,存放已经完整经历了完整生命周期的bean对象。Map<String, Object> earlySingletonObjects: 二级缓存,存储早期暴露出来的bean对象,bean的生命周期未结束。(属性还未填充完)> > singletonFactories: 三级缓存,存储生成bean的工厂二级缓存可以解决没有aop的循环依赖。核心思路是使用二级缓存来提前曝光创建过程中的对象。
2.算法与数据结构 排序算法平均时间最差时间稳定度额外空间备注冒泡排序O(n²)O(n²)稳定O(1)n小较好插入排序O(n²)O(n²)稳定O(1)n小较好选择排序O(n²)O(n²)不稳定O(1)n小较好交换排序O(n²)O(n²)不稳定O(1)大部分数据已经排序好快速排序O(nlogn)O(n²)不稳定O(nlogn)n大时较好基数排序O(nlogrn)O(nlogrn)稳定O(n)n是真数,r是基数桶排序O(nlogn)
1.场景设计题 熔断状态下,服务进入不可用状态,此时有少量的流量侦探服务状态,如果服务没有恢复继续熔断服务访问量如果超过某个阈值,超过限制部分的流量直接拒绝掉熔断状态或者主动关闭服务部分模块,保留主要功能的方式,就是服务降级的一种方式Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。可以使用这两个对象来包裹待执行的任务。用与依赖服务返回单个操作结果的场景,而。
7、行为模式-观察者模式 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知,zookeeper watcher通知用的就是此模式。使用面向对象技术,可以将这种依赖关系弱化。在抽象类里有一个 ArrayList 存放观察者们。1、拍卖的时候,拍卖师观察最高标价,然后通知给其他竞价者竞价。
0、Java开发常见(并发,JVM) 并发问题 详解 请谈谈你对volatile的理解 link CAS你知道吗? link 原子类Atomiclnteger的ABA问题谈谈?原子更新引用知道吗? link 我们知道ArrayList是线程不安全,请编码写一个不安全的案例并给出解决方案 link 公平锁/非公平锁/可重入锁/递归锁/自旋锁谈谈你的理解?请手写一个自旋锁 link CountDownLatch/CyclicBarrier/Semaphore使用过吗? link
10、Mysql常见问题 自适应哈希索引是Innodb引擎的一个特殊功能,当它注意到某些索引值被使用的非常频繁时,会在内存中基于B-Tree所有之上再创建一个哈希索引,这就让B-Tree索引也具有哈希索引的一些优点,比如快速哈希查找。这是一个完全自动的内部行为,用户无法控制或配置使用命令查看INSERT BUFFER AND ADAPTIVE HASH INDEX多叉树(multiway tree)允许每个节点可以有更多的数据项和更多的子节点。2-3树,2-3-4树就是多叉树,多叉树通过。
1、集群种类 一个集群只有一台主机,其他的节点都是从机的模型,从机可能什么活都不干,只负担主机的后备,也可能做一些任务型的工作,这部分工作不会关系数据的事务。HA什么活都不干的集群:Canal,HA做部分活的集群:Kafka、ES主从模式集群等。HA重点侧重于高可用性,对数据一致性关注高。
8、LSM树 最近在调研NoSQL数据库,发现RocksDB、LevelDB、HBase以及Prometheus等,其底层的存储引擎都是基于LSM树,于是决定花时间彻底吃透LSM树这一数据结构。不幸的是,在查阅资料学习的过程中,发现网上各种文章汗牛充栋、抄来抄去,不是文不对题就是不知所云。一气之下决定自己写一篇出来消消气,便有了这篇文章。。。PS:学了这么多数据结构,LSMTree应该是最年轻的一个,它在1996年被设计出来(属老鼠的),年纪比我还小~
6、Elasticsearch优化 预处理节点,主要是对数据进行预处理,比如对字段重命名,分解字段内容,增加字段等,类似于Logstash, 就是对数据进行预处理,ingest里面可以定义pipeline(管道),pipeline可以由很多个processor(官方预定义28个)构成,用来出来预处理数据,使用方式:先定义好预处理pipeline,然后在存储数据的时候指定pipeline,如:成为ingest node的方式 node.ingest:true 默认(true)当写索引时,需要把写入的数据都同步到副本节点,
1、netty百万连接设计及优化 理论上系统内存有多少就可以打开多少的文件描述符,但是在实际中内核是会做相应的处理,一般最大打开文件数会是系统内存的10%(以KB来计算),称之为系统级限制。这个数字可以通过 cat /proc/sys/fs/file-max 或者 sysctl -a | grep fs.file-max 命令查看。:用户打开文件描述符默认是1024,文件描述符范围1-65535,这个数字可以通过 ulimit -n查看,可以在65535范围内调整。
5、GCRoot作用及遍历算法 以GC Roots为根节点,根据引用关系向下搜索,搜索过程走过的路径称为引用链,如果某个对象到GC Roots之间没有引用链相连,那这个对象就是可回收的垃圾对象。我们知道Java堆里面有未被引用的、已被引用的两类对象,问题是我们有什么依据判断谁是垃圾对象需要被回收?换句话说,我们如何判断一个对象被引用?这就需要我们从一个点出发找出他所有的引用对象。这个点就是GCRoot。GCRoot的作用就是从这点出发,找到所有的可到达的引用对象,且这个对象必须不能是待回收的对象。我们知道JVM结构有 栈、方法区、本地方法
8、java常见名词总结 JNI是Java Native Interface的缩写,是使用Java调用系统本地接口、及定制的C、C++语言的接口的方案,可以确保代码在不同的平台上方便移植。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。本地代码与 Java 虚拟机之间是通过 JNI 函数实现相互操作的。JNI 函数通过接口指针来获得,本地方法将 JNI 接口指针当作参数来接受。
2、Elasticsearch集群种类 整个集群的管理者、索引管理、分片管理,以及整个集群的状态的管理,master节点是从master候选节点中选出的,成为master候选节点的方式:node.master:true 默认(true)
9、分布式架构种类 集群目前可以分3类,高可用性集群(High Availability Cluster)HA、负载均衡集群(Load Balance Cluster)LB、高性能集群(High Performance Computing Cluster)HPC,这3类集群有什么区别呢?