03 2022 档案

并发容器的前世今生是怎样的?
摘要:1)我们java中的容器大致可以分为哪几类? list set map queue 2)线程安全容器的进化史是怎样的? 1.5之前,我们的线程安全容器都是用synchronized修饰的,这样的话串行度很高,程序的性能就比较拉跨。这时的容器 只能叫做同步容器 1.5之后,我们用了写时复制技术,保障线 阅读全文

posted @ 2022-03-31 12:17 Love&Share 阅读(37) 评论(0) 推荐(0) 编辑

CountDownLatch和CyclicBarrier:如何让多线程步调一致?
摘要:案例:对账系统的业务是这样的,用户通过在线商城下单,会生成电子订单,保存在订单库;之后物流会生成派送单给用户发货,派送单保存在派送单库。为了防止漏派送或者重复派送,对账系统每天还会校验是否存在异常订单。对账系统的处理逻辑很简单,系统流程图如下。目前对账系统的处理逻辑是首先查询订单,然后查询派送单,之 阅读全文

posted @ 2022-03-30 22:26 Love&Share 阅读(667) 评论(0) 推荐(2) 编辑

设置工作模式与环境(中):建造二级引导器
摘要:1)上节课安装的GRUB不是已经 把我们的操作 系统加载到内存中了吗?为什么还要二级引导器? 二级引导器是操作系统的排头兵,他先去收集计算机的信息,看看计算机硬件支持不支持运行我们的操作系统。GRUB负责的是操作系统加载进内存,而二级引导器负责的是检验计算机 能不能运行我们的操作系统,并且初始化好一 阅读全文

posted @ 2022-03-30 17:08 Love&Share 阅读(236) 评论(0) 推荐(0) 编辑

读多写少的场景下,竟然还有比读写锁更牛X的锁?
摘要:1)上一篇文章我们聊了读写锁,他的适用场景是读多写少的场景下,那有没有其它性能比读写锁还要牛逼的锁呢? StampedLock ,java1.8诞生的。 2)StampedLock比读写锁牛在什么地方? 读写锁分为两种:读锁和写锁 StampedLock有三种模式:写锁和悲观读锁,这两个对应我们的读 阅读全文

posted @ 2022-03-29 20:55 Love&Share 阅读(184) 评论(0) 推荐(1) 编辑

order by是怎样工作的?
摘要:看看我们的t表定义是这样的: CREATE TABLE `t` ( `id` int(11) NOT NULL, `city` varchar(16) NOT NULL, `name` varchar(16) NOT NULL, `age` int(11) NOT NULL, `addr` varc 阅读全文

posted @ 2022-03-28 22:23 Love&Share 阅读(115) 评论(0) 推荐(0) 编辑

怎样用读写锁快速实现一个缓存?
摘要:1)SDK已经有管程了,不是可以解决所有的并发问题的吗,为什么还要有读写锁? 不同的场景下使用不同的锁效果是不一样的,我们的读写锁用在读多写少的场景下那是非常有用的。 2)读写锁是我们JAVA特有的吗?他有什么原则? 读写锁并不是java特有的,是通用的一个技术方案。读写锁的话有三个基本原则: 同一 阅读全文

posted @ 2022-03-28 18:03 Love&Share 阅读(576) 评论(0) 推荐(0) 编辑

如何用信号量去实现一个限流器?
摘要:1)什么是信号量呢? 65年斯特拉提出来信号量,一直用到80年左右都是用它来解决并发的问题,直到管程模型出来了,他就逐渐落魄了。信号量你可以类比生活中的红绿灯,绿灯行红灯停。 2)信号量模型是怎样的? 一个计数器,一个等待队列,3个方法(init(),up(),dowm()) 3)信号量的工作原理是 阅读全文

posted @ 2022-03-27 14:54 Love&Share 阅读(377) 评论(0) 推荐(0) 编辑

动态规划-最长连续递增序列
摘要:给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。 思路: 严格和前一个数比较,而不是前面的某个数。 代码: class Solution { public int findLengthOfLCIS(int[] nums) { int len = nums.length; 阅读全文

posted @ 2022-03-27 14:30 Love&Share 阅读(46) 评论(0) 推荐(0) 编辑

设置工作模式与环境(上):建立计算机
摘要:1)一个内核工程需要多个文件,如果让GRUB大兄弟一个一个文件去加载,那他得累死,那我们应该怎么办? 把多个文件合起来,这个合起来的文件叫内核映像文件,GRUB加载它就行了。 2)这个内核映像文件有了,那么怎样让GRUB找到他呢?你得告诉我一些提示吧,这就是映像文件的格式,那映像文件的格式是怎样的呢 阅读全文

posted @ 2022-03-25 17:24 Love&Share 阅读(224) 评论(0) 推荐(0) 编辑

count(*)这么慢,我该怎么办?
摘要:1)计算一个表有多少行数用什么命令? select count(*) from t 2)count(*)底层是怎样实现的? 在MYISAM中,是把这个总行数存到磁盘中去的,要的时候直接去读就行,特别快。 而在InnoDB引擎中,这个总数是需要去一行一行的扫描表,然后累加起来看有多少行。所以当数据量大 阅读全文

posted @ 2022-03-24 15:11 Love&Share 阅读(561) 评论(0) 推荐(0) 编辑

Lock和Condition(下):Dubbo如何用管程实现异步转同步?
摘要:1)Lock 和 Condition 实现的管程在方法的调用上和sychronized有什么不同? 前者用await(), signal(),signalAll()。后者使用wait,notify(),notifiAll(); 2)本节我们要探究dubbo异步转同步,那什么是异步什么是同步呢? 你去 阅读全文

posted @ 2022-03-24 11:52 Love&Share 阅读(362) 评论(0) 推荐(0) 编辑

动态规划之最长递增子序列
摘要:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1: 输入:nums = [10,9,2,5,3,7,101,18 阅读全文

posted @ 2022-03-24 10:41 Love&Share 阅读(53) 评论(0) 推荐(0) 编辑

为什么明明表数据删掉一半,表文件大小不变?
摘要:1)表结构和表数据是怎样放置的? 8.0之前啊,表结构是放在.frm为后缀的文件中。8.0之后呢,可以放在了系统数据表中。 2)先来 看看参数innodb_file_per_table的含义是怎么? 当值为off的时候,表示我的文件数据是放在共享表中的。 当值为on的时候,那文件数据就是单独放在一个 阅读全文

posted @ 2022-03-23 15:30 Love&Share 阅读(178) 评论(0) 推荐(0) 编辑

Lock和Condition(上):隐藏在并发包中的管程
摘要:1)管程在SDK包中是怎样实现的? 靠Lock和Condition接口,Lock用来解决互斥的问题 ,Condition用来解决同步的问题。 2)java语言层面已经有sychronized来 实现管程了,那为什么我们的sdk工具包中还要再实现一遍管程,直接用sychronized不就行了吗? sy 阅读全文

posted @ 2022-03-23 12:12 Love&Share 阅读(37) 评论(0) 推荐(0) 编辑

如何用面向对象的思想来写好并发程序?
摘要:1)我们设计并发程序需要明确那三点呢? 把我们共享变量封装起来,提供一定接口给外界访问。 明确我们共享变量之间的约束条件 指定访问共享变量的策略 2)该如何去封装我们的共享变量呢? 比方说我要封装一个计数器的共享变量count,那就是属性私有,get,addOne方法,并且方法用synchroniz 阅读全文

posted @ 2022-03-22 14:38 Love&Share 阅读(36) 评论(0) 推荐(0) 编辑

为什么我的MySQL会“抖”一下?
摘要:不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短。 1)InnoDB 在处理更新语句的时候与磁盘有关的操作是什么? 写日志 2)这个日志叫作什么? redo log(重做日志) 阅读全文

posted @ 2022-03-15 23:26 Love&Share 编辑

Cache与内存:程序放在哪儿?
摘要:1)什么是局部性原理? ​ #include <stdio.h> int main(){ int i,j; for(i=1;i<=9;i++){ for(j=1;j<=i;j++){ printf("%d*%d=%2d ",i,j,i*j); } printf("\n"); } return 0;  阅读全文

posted @ 2022-03-15 17:31 Love&Share 阅读(449) 评论(0) 推荐(0) 编辑

虚幻与真实:程序中的地址如何转换?
摘要:1)读取指令、读写数据的时候需要和内存进行怎样的交互? 告诉内存芯片:hi,内存老哥请你把 0x10000 地址处的数据交给我……hi,内存老哥,我已经计算完成,请让我把结果写回 0x200000 地址的空间。这些地址存在于代码指令字段后的常数,或者存在于某个寄存器中。 设想一下,如果一台计算机的内 阅读全文

posted @ 2022-03-15 17:27 Love&Share 阅读(431) 评论(0) 推荐(0) 编辑

CPU工作模式:执行程序的三种模式
摘要:1)CPU 的工作模式有哪三种? 实模式、保护模式、长模式 2)如果下面这段应用程序代码能够成功运行,会有什么后果? ​ int main() { int* addr = (int*)0; cli(); //关中断,什么信号来都不能终止CPU while(1) { *addr = 0; addr++ 阅读全文

posted @ 2022-03-15 17:25 Love&Share 阅读(536) 评论(0) 推荐(0) 编辑

一不小心就死锁了,怎么办?
摘要:1)上一节我们用一把大锁锁住银行的转账业务,这样会造成什么样的问题? 所有账户的转账操作都是串行的,性能太差 A 转账户 B、账户 C 转账户 D 这两个转账操作现实世界里是可以并行的,但是在这个方案里却被串行化了 2)那么如何优化可以让我们的账户之间转账和入账能够并行执行呢? 在 transfer 阅读全文

posted @ 2022-03-10 23:04 Love&Share 阅读(299) 评论(0) 推荐(0) 编辑

震撼的Linux全景图:业界成熟的内核架构长什么样?
摘要:1)Linux怎么来的? Linus 为了方便访问大学服务器中的资源 ,在自己的机器上写了一个文件系统和硬盘驱动,这样就可以把自己需要的资源下载到自己的机器中。随后linus把这款操作系统雏形开源,成千上万的程序员敲出了linux操作系统。 2)为什么很多公司企业网络把linux当作服务器来使用? 阅读全文

posted @ 2022-03-10 23:03 Love&Share 阅读(1372) 评论(0) 推荐(2) 编辑

几行汇编几行C:实现一个最简单的内核
摘要:1)现有的操作系统都是用什么语言开发出来的? 汇编和 C 语言 2)GRUB是什么? 叫操作系统起床的。允许我们的计算机上有多个操作系统。要用哪个的时候就把哪个的内核叫醒。 帮我来管理操作系统的管家。 3)GRUB哪里能获得呢? Ubuntu Linux 操作系统自带 4)我们要实现一个Hello 阅读全文

posted @ 2022-03-05 23:16 Love&Share 阅读(300) 评论(0) 推荐(0) 编辑

怎么给字符串字段加索引?
摘要:假设,你现在维护一个支持邮箱登录的系统,用户表是这么定义的: create table SUser( ID bigint unsigned primary key, email varchar(64), ... )engine=innodb; 由于要使用邮箱登录,所以业务代码中一定会出现类似于这样的 阅读全文

posted @ 2022-03-05 23:13 Love&Share 阅读(456) 评论(0) 推荐(1) 编辑

程序的运行过程:从代码到机器运行
摘要:1)你知道程序是如何运行的吗? 1.1)Unix是怎么来的? Ken Thompson 的妻子回娘家一个月,他在贝尔实验室无聊,就搞出了UNICS操作系统(unix的前身)。 当时可没有c语言,大佬是用B语言和汇编语言写出来的。 1.2)那UNIX是怎么来的呢? 牛人的朋友也是牛人,Thompson 阅读全文

posted @ 2022-03-04 23:26 Love&Share 阅读(480) 评论(0) 推荐(0) 编辑

MySQL为什么有时候会选错索引?
摘要:案例: CREATE TABLE `t` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `a` (`a`), KE 阅读全文

posted @ 2022-03-04 23:21 Love&Share 阅读(91) 评论(0) 推荐(0) 编辑

互斥锁(下):如何用一把锁保护多个资源?
摘要:1)当我们要保护多个资源时,首先要做的是什么? 分析这些资源是否存在关联关系 2)应该怎样保护没有关联关系的多个资源? 应该怎样保护没有关联关系的多个资源?**就是没有关联关系的,这种场景非常容易解决,那就是球赛有球赛的门票,电影院有电影院的门票,各自管理各自的 对应到编程领域,例如,银行业务中有针 阅读全文

posted @ 2022-03-04 23:18 Love&Share 阅读(443) 评论(0) 推荐(3) 编辑

互斥锁(上):解决原子性问题
摘要:1)回顾一下什么是原子性? 一个或多个操作在CPU执行的过程中不被中断的特性,称为原子性。 2)原子性问题的源头是什么? 线程切换 3)原子性问题到底该如何解决呢? 既然原子性问题的产生源头是线程切换,而线程切换依赖CPU中断的,所以禁止CPU发生中断就能禁止线程切换 4)为什么说单核的时候好解决原 阅读全文

posted @ 2022-03-03 22:04 Love&Share 阅读(162) 评论(0) 推荐(0) 编辑

Java内存模型:看Java如何解决可见性和有序性问题
摘要:1)导致可见性的原因是缓存,导致有序性的原因是编译优化,那我们最直接的解决可见性和有序性的方案是什么? 禁用缓存和编译优化 2)1是暴力解法,虽然问题解决了,但是性能拉跨了,那合理的解决方案是什么? 按需禁用缓存以及编译优化 3)如何做到“按需禁用”呢? 所谓“按需禁用”其实就是指按照程序员的要求来 阅读全文

posted @ 2022-03-03 22:01 Love&Share 阅读(126) 评论(0) 推荐(0) 编辑

可见性、原子性和有序性问题:并发编程Bug的源头
摘要:1)如何快速而又精准地解决“并发”类的疑难杂症? 理解这件事情的本质,追本溯源,深入分析这些 Bug 的源头在哪里。 2)CPU、内存、I/O 设备的速度差异有多大? CPU 是天上一天,内存是地上一年(假设 CPU 执行一条普通指令需要一天,那么 CPU 读写内存得等待一年的时间) 内存和 I/O 阅读全文

posted @ 2022-03-03 21:59 Love&Share 阅读(89) 评论(0) 推荐(0) 编辑

普通索引和唯一索引,应该怎么选择?
摘要:1)什么是唯一索引? 不允许具有索引值相同的行,比如身份证唯一的 案例:假设你在维护一个市民系统,每个人都有一个唯一的身份证号,而且业务代码已经保证了不会写入两个重复的身份证号。如果市民系统需要按照身份证号查姓名,那该如何建索引? select name from CUser where id_ca 阅读全文

posted @ 2022-03-03 21:56 Love&Share 阅读(525) 评论(0) 推荐(1) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示