zookeeper学习草稿纸

指令重排序:
https://baijiahao.baidu.com/s?id=1701616903992143186&wfr=spider&for=pc

JVM、JDK、JRE
静态方法为什么不能调用非静态成员?
重载和重写的区别
可变参数
基本数据类型

元空间存放了哪些数据
元空间与堆的关系 https://baijiahao.baidu.com/s?id=1701616903992143186&wfr=spider&for=pc

字符串、字符串常量池原理 https://blog.51cto.com/u_15281317/3008750


指令重排序:
https://baijiahao.baidu.com/s?id=1701616903992143186&wfr=spider&for=pc

JVM、JDK、JRE
静态方法为什么不能调用非静态成员?
重载和重写的区别
可变参数
基本数据类型

元空间存放了哪些数据
元空间与堆的关系 https://baijiahao.baidu.com/s?id=1701616903992143186&wfr=spider&for=pc

字符串、字符串常量池原理 https://blog.51cto.com/u_15281317/3008750

基本数据类型和包装类的区别
基本数据类型和引用类型在JVM中的存储位置:https://blog.csdn.net/guchenjun789/article/details/82903775
包装类的缓存机制



http://redisdoc.com/client_and_server/info.html

主TPS、从TPS、缓存命中、内存使用

Tomcat为什么要打破双亲委派机制

Redis面试题

Redis脑图
	https://www.processon.com/view/link/624d3b9a5653bb5d058aad1a#map
布隆过滤器的原理:https://baijiahao.baidu.com/s?id=1681783534561475386&wfr=spider&for=pc
深入理解Redis scan命令:https://blog.csdn.net/Dongguabai/article/details/120431231




手写dubbo
dubbo使用
dubbo整合spring
dubbo服务注册

mysql:
https://github.com/codinglin/StudyNotes/blob/main/MySQL%E5%9F%BA%E7%A1%80%E7%AF%87/MySQL%E5%9F%BA%E7%A1%80%E7%AF%87.md

解析配置文件
	是单机?
	是集群?
		初始化一个NIO或者Netty的通信的工厂类
		传递一个端口2181到上面的通信工厂类
		将配置很多配置文件中的参数设置的到quorumPeer对象(比如:quorumPeer.setElectionType(config.getElectionAlg()); 这个值默认是3 -》protected int electionAlg = 3;)
		quorumPeer.setZKDatabase(new ZKDatabase(quorumPeer.getTxnFactory())); //创建默认节点/zookeeper 
			看一眼DataTree,其实就是(路径,路径对应的数据)  
			看一眼DataNode的属性,也就是数据结构
		quorumPeer.start();
			loadDataBase(); -》zkDb.loadDataBase(); 我们往下跟,会发现加载快照文件和日志文件到内存
			startServerCnxnFactory();
				cnxnFactory.start(); 绑定2181端口
			adminServer.start(); 启动jettyServer,其实就是对外提供了一些状态管理信息,默认8080端口	
			startLeaderElection()
				如果当前节点是LOOKING状态(还没选举,都是LOOKING状态),初始化一个投票
				createElectionAlgorithm(3)
					listener.start();
						初始化ss = new ServerSocket();
						绑定选举端口,配置文件中末尾那一列的端口 (选举端口是选举用的,2181是提供给客户端使用的)
						ss.accept(); //阻塞在这里,等待其它节点连接。
						receiveConnection(client); //处理客户端连接
							handleConnection
					fle.start();	
						启动两个线程:wsThread wrThread
						我们再看一下上面的两个线程:WorkerSender
							看一下run方法:sendqueue.poll, 这里有个阻塞队列,循环拉取消息
							如果拉取到了消息:process()
							WorkerReceiver线程和上面的类似:manager.pollRecvQueue() 
			super.start();	// 这个是线程启动,直接看run方法,这里面是选举的核心逻辑
				run
					LOOKING
						lookForLeader
							updateProposal // 投自己一票?
							sendNotifications //发送选票,就算其它机器没有启动,也会发,只是报错而已
								sendqueue.offer(notmsg); //往队列中放选票,往远端去发送消息
							recvqueue.poll	//获取其它机器给自己的投票
							如果一个选票都没有收到
								manager.connectAll();
									connectOne(sid); 循环和远端的机器去做连接
										connectOne(sid, lastProposedView.get(sid).electionAddr)
											initiateConnection 最后会调用到这里,和远程机器建立连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值