架构师之路
文章平均质量分 72
自学软考架构师,过程记录与分享
脱发的老袁
这个作者很懒,什么都没留下…
展开
-
【线程】wait()+notifyAll()实现多个线程交替遍历,输出ABCABC
实际会有这样的场景吗?下面举几个例子1、假设在一个食堂,有很多人在排队打饭,每个人需要完成以下步骤:先拿餐具,然后拿菜,再拿饭,最后付钱。2、多线程下载器。当我们下载一个大文件时,可以使用多个线程同时从不同的服务器上下载文件的不同部分,然后将这些部分合并成一个完整的文件。通过多个线程交替遍历不同的服务器,可以提高下载速度,加快文件的下载过程。3、医院的门诊、机场的登机口、超市的收银台等等。原创 2023-08-03 16:06:43 · 1369 阅读 · 0 评论 -
【网络|TCP】三次握手、四次握手
TCP是一种面向连接的可靠的传输协议,建立和断开TCP连接时需要进行握手的过程。其中,TCP的连接建立需要进行三次握手,而连接断开则需要进行四次握手。原创 2023-08-03 11:04:34 · 739 阅读 · 0 评论 -
【数据结构】二叉树、二叉搜索树、平衡二叉树、红黑树、B树、B+树
二叉树(Binary Tree):每个节点最多有两个子节点(左子节点和右子节点),没有限制节点的顺序。特点是简单直观,易于实现,但查找效率较低。二叉搜索树(Binary Search Tree,BST):在二叉树的基础上,左子节点的值小于等于父节点的值,右子节点的值大于等于父节点的值。特点是插入、删除和查找的平均时间复杂度为O(log n),但如果树不平衡,可能会退化为链表,时间复杂度为O(n)。原创 2023-08-01 10:10:01 · 1032 阅读 · 0 评论 -
【Java】HashMap线程安全问题与解决方式
假设有一个大仓库,里面存放着很多商品。如果只有一个锁来保护整个仓库,那么每次只能有一个工人进入仓库,其他工人需要等待。为了提高效率,将大仓库分成多个小仓库(锁分段技术中的Segment),每个小仓库都有自己的锁。每个工人只需要获取自己所在的小仓库的锁,就可以独立地进入小仓库取出商品进行处理。这样,多个工人可以同时进入不同的小仓库,互不干扰,提高了并发度和效率。HashMap是非线程安全的,可以使用SynchronizedMap、ConcurrentHashMap。原创 2023-08-02 10:09:49 · 1062 阅读 · 0 评论 -
【数据结构|二叉树遍历】递归与非递归实现前序遍历、中序遍历、后序遍历
前序遍历(Preorder Traversal): 前序遍历的顺序是先访问根节点,然后按照先左后右的顺序访问子节点。对于上面的二叉树,前序遍历的结果是:4 -> 2 -> 1 -> 3 -> 6 -> 5 -> 7。中序遍历(Inorder Traversal): 中序遍历的顺序是按照先左后根再右的顺序访问子节点。对于上面的二叉树,中序遍历的结果是:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7。原创 2023-08-02 09:34:43 · 869 阅读 · 0 评论 -
【Java】String类为什么是final的
面试时被问到,String为什么是final的?至于String为什么是final的,如下。面试官:回家等通知!原创 2023-07-31 15:25:09 · 121 阅读 · 0 评论 -
【数据库】事务四个特性、脏读、不可重复度、幻读、事务隔离级别
需要注意的是,随着隔离级别的提高,事务的并发性能可能会下降,因为更严格的隔离级别需要更多的锁和资源管理。因此,在选择事务隔离级别时,需要权衡一致性和性能之间的关系,并根据实际业务需求和安全性要求进行选择。原创 2023-07-31 13:36:54 · 297 阅读 · 0 评论 -
【Java】详解volatile和synchronized关键字
都是Java中用于控制并发的关键字,但是它们的使用场景和原理是不同的。操作不是原子性的,所以最后输出的结果可能小于2000。操作的原子性,所以最后输出的结果为2000。方法并不是线程安全的,因为。在上述示例中,尽管使用了。方法是线程安全的,因为。在上述示例中,使用了。原创 2023-07-31 10:47:18 · 653 阅读 · 0 评论