MT一面记录 Java 内存模型是理解和编写正确并发程序的基础。通过了解 JMM 的核心概念、happens-before 规则以及相关关键字的使用,可以有效地避免多线程编程中的常见问题,如数据不一致、竞态条件等。
图_基础算法 图这种数据结构还有一些比较特殊的算法,比如二分图判断,有环图无环图的判断,拓扑排序,以及最经典的最小生成树,单源最短路径问题,更难的就是类似网络流这样的问题。先看拓扑排序(有环无环):la总微信文章的链接:https://mp.weixin.qq.com/s?然后看二分图然后看并查集然后最小生成树dijkstra 单源最短路径。
java实现队列和栈 如果需要高性能的堆栈或队列,并且不需要频繁地按索引访问元素,ArrayDeque 通常是首选。如果需要列表操作或者存储 null 值,并且可以牺牲一些性能,可以考虑 LinkedList。对于并发应用,以上两个类都不是线程安全的,需要额外的同步措施,或者考虑使用 Java 的并发集合类。在实际应用中,选择使用哪个类应当基于具体用途、性能需求和内存消耗的权衡。
KMP算法 字符串匹配 2.2. 如果发现坏字符,查询next数组,得到匹配前缀所对应的最长可匹配前缀子串,移动模式串到对应位置。空间复杂度是O(m),m为模式串的长度,n为主串长度。2.3.如果当前字符匹配,继续循环。对模式串预处理,生成next数组。2.1. 比较主串和模式串的字符。时间复杂度是O(m+n)进入主循环,遍历主串。
git 深入理解 之前一直是对git的基础命令有了解,最近正好有这个时间和需求,将git命令重新理解了下。git仓库中保留的是你的目录下所有文件的快照。还有提交记录,这个记录很轻量,git会将此次版本与上一次的版本进行对比,将所有的差异打包到一起作为一个提交记录。先说一些简单的之前模糊的概念。1. originorigin:origin可以说是远程仓库的一个指针。 其实就是远程仓库服务器的一个copy。git remote可以列出当前所在分支对应的每一个远程服务器的简写。git remote show orig
git rebase四种常用场景 常见的几个git命令:如果远程已经新建了一个新的分支,但是本地使用git branch -a都查看不到,可以使用 git remote update origin --prune来更新一下即可。当远程新建了一个分支之后,本地可以使用以下命令track此分支,并在本地建立对应分支。git checkout --track origin/newRemoteBranch版本回退:Git reset --hard idGit reset --soft id注意 这个回退只是本地的回
Redis的三种模式 笔记记录 https://cloud.tencent.com/developer/news/8009,可以看一下这两篇文章https://blog.csdn.net/ahfywangqiang/article/details/86537421之前有看过一些Redis模式相关文章,今天又看了上面两篇。这里总结一下笔记。学习之用。主从模式下,一主多从的话,主挂了,本Redis服务就不能写,只能读(从服务...
数据结构之红黑树 其实红黑树就是一种自平衡的二叉搜索树,因为如果插入的数据时有序的时候,二叉树会变成链表,插入删除的效率非常的低。规则当插入(删除)一个节点时,必须遵循一定的规则,他们被称为红黑规则。遵循红黑规则,树就是平衡的:每一个节点不是黑就是红;根节点总是黑色的;红节点的子节点必须是黑色的(红色节点不能连续),反之则不一定成立;从根节点到叶子节点or空子节点的每条路径 上的黑色节点数目(黑色高...
select epoll poll的区别 (1)select,poll实现需要自己不断轮询所有fd集合,直到设备就绪,期间可能要睡眠和唤醒多次交替。而epoll其实也需要调用epoll_wait不断轮询就绪链表,期间也可能多次睡眠和唤醒交替,但是它是设备就绪时,调用回调函数,把就绪fd放入就绪链表中,并唤醒在epoll_wait中进入睡眠的进程。虽然都要睡眠和交替,但是select和poll在“醒着”的时候要遍历整个fd集合,而epoll...
各个MQ消息队列介绍以及区别比较(RabbitMq ActiveMQ、ZeroMQ、Kafka) 首先,MQ其实就是消息队列,队列我们可以理解为管道,以管道的放手做消息传递。1. RabbitMQ,ActiveMq,ZeroMq比较TPS比较:ZeroMq 最好,RabbitMq 次之, ActiveMq 最差。持久化消息:ZeroMQ不支持。ActiveMQ和RabbitMQ都支持。技术点:可靠性、灵活的路由、集群、事务、高可用的队列、消息排序、问题追踪、可视化管理工具、插件系统...
Redis和memcache的区别(Redis相关、Redis的String中key和value的最大值是512M) Redis的String中key和value的最大值(512M)Redis的特点速度快;因为数据存在内存中。类似于HashMap,HashMap的优势就是查找和操作的速度都是O(1);支持丰富的数据类型:String、list、set、sorted set、hash支持事务,操作都是原子性的;丰富的特性:可用于缓存、消息等,按照Key设置过期时间,过期之后自动删除,有多种过期策略支持...
秒杀系统相关-分布式锁解决秒杀超卖的优化and高并发的攻击和解决 这两篇文章很简单易懂,自己看一下就行,所以没有自己写一下。蛮有趣的。分布式锁解决超卖的优化:《用分布式锁来防止库存超卖,但是是每秒上千订单的高并发场景,如何对分布式锁进行高并发优化来应对这个场景?》](https://blog.csdn.net/u010391342/article/details/84372342)高并发情况下出现的问题和如何解决:《Web大规模高并发请求和抢购的解决方案》...
分布式理论(CAP BASE TCC 2PC 3PC) 分布式数据一致性因为在分布式系统中,为了保证数据的高可用,会将数据保留多个副本(replica),这些副本分布在不同的物理机器上。所以可能导致数据在进行写入副本的过程中出现丢失等故障,造成数据不一致的问题。CAPConsistency 一致性、Availability 可用性、Partition Tolerance 分区容错性Consistency 一致性:这个和数据库ACID的一致性类似...
幂等的实现方案 我之前有写过关于HTTP的幂等性:《(HTTP的)幂等性Idempotence》但是其实幂等不仅仅只是用于HTTP的设计中,很多重要的情况,这些逻辑都需要幂等的特性来支持。幂等性概念幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使...
ThreadLocal理论以及其内存泄漏的问题 本人的另一个关于ThreadLocal理论和实践的文章:《ThreadLocal实现线程范围内数据共享》ThreadLocal的实现是这样的:每个Thread 维护一个 ThreadLocalMap 映射表,这个映射表的 key 是 ThreadLocal 实例本身,value 是真正需要存储的 Object。具体原理ThreadLocal里类型的变量,其实是放入了当前Thread里。每个T...