首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我们一直谈论“代码”,但会“代码”

编程,又被称作“代码”。这个说法有可能会带来一点点误解,让人觉得如何“”是学习编程要解决的主要问题。但事实并非如此。...尽管最终代码要在键盘上敲出来,但这个过程在开发中的实际时间占比可能要远远小于的预期。编写之前的设计,编写之后的调试,以及阅读他人的代码,这些会花费比“”更多的时间。...否则没有标杆,仅凭自己闷头,往往事倍功半。 2. 提高 debug 能力。对代码的阅读,本身就是一种能力,是需要练习积累的。只有能看懂代码,才能快速准确地定位代码中的问题。 3. 良好的代码风格。...更进一步,甚至可以通过阅读代码参与到一些开源项目,与高手交流。 如何代码 既然代码是有益且必要的,那么该如何代码呢?这里给几点建议: 1. 有目的的阅读。...很多同学跟我说过,代码能看懂,就是自己不出来。实际上,我觉得就是没看懂:只是看懂了每一行代码的意思,但并没有理解整个代码的设计。从简单的代码做起,重复这样的过程。

1.4K20

手写过阻塞队列

来源:https://blog.csdn.net/qq_38306425/article/details/109332045 面试官:你好,先做个自我介绍吧 某人:面试官你好,我叫开局一张嘴面试全靠吹...面试官微微一笑,捋了捋稀疏的头发:看你简历,精通多线程?那你手写过堵塞队列? 某人心里出现一万个问号,堵塞队列是啥玩意?平时基本都是crud,顶多用多线程跑数据 ? 某人:没有手写过。...面试官:哦,那你说下堵塞队列吧 某人支支吾吾:这个有点忘了 面试官:没事,那我们下一个。 此处省略一万字。 面试官扭了扭严重负荷的颈椎:先到这里吧,先回去等通知。 某人:好的。...3.DelayQueue:DelayQueue是基于优先级的一个无界队列队列元素必须实现Delayed接口,支持延迟获取,元素按照时间排序,只有元素到期后,消费者才能从队列中取出。...5.手写堵塞队列 我是参照了ArrayBlockingQueue的源码的,欢迎大家斧正。

44340
您找到你想要的搜索结果了吗?
是的
没有找到

深夜!小胖问我什么是读写锁?插队策略?升降级?

非公平下的锁应该插队? 首先读写锁也是可以设置公平非公平的。具体可以这样设置:「公平锁在构造传入 true,否则传 false。啥也不传,默认的是非公平锁」。...现在狗哥和小钊两个线程同时读取,线程 1 想要写入,但是由于已经有两个线程持有锁了,只能去队列等待。这时,小民这个线程想插队获取锁。...「PS:由于锁是独占锁,当前线程获取锁之后,其它线程就既不能获取锁也不能获取锁了,但是当前已经获取锁的线程仍然可以获取锁」。 为什么需要锁的降级? 可能会说,锁既能修改、又能读取。...非公平策略下: 为了防止 “饥饿”,在等待队列的头结点是尝试获取锁的线程的时候,不允许锁插队。...5、升降级策略 升降级策略:只能从锁降级为锁,不能从锁升级为锁。 巨人的肩膀 https://kaiwu.lagou.com/course/courseInfo.htm?

1.3K10

微软适合正青春的

微软历史 微软这个公司的编年史小编在这里不想多说了,想必大家应该都听说过很多故事:它诞生于70年代,从90年代末全胜时期一统江湖的霸主,到今天这个拥有10万+员工的全球化公司,不得不说,还是一个非常伟大的公司...大家有兴趣可以读一吴军博士的「浪潮之巅」,微软也是其中浓墨的一笔。...或者由于某些原因来了微软之后,整天唉声叹气,觉得「a big fish falls into a small pond」, 真的是这样的?...懂了c#再去看java只会觉得java很简单,是个c#的真子集;懂了CLR看JVM基本差不多;熟悉了typescript再去看coffeescript, es6;弄了一堆powershell再去看各种...小编也不知道,也许把胡子剃干净了,装嫩混入年轻人队伍就好啦 :-D 权力的游戏 当然,以为微软大家都在做技术?工程师码农就是代码搬砖?至少在小编看来微软不是的。

91970

【RTOS训练营】作业讲解、队列和环形缓冲区、队列——传输数据、队列——同步任务和晚课提问

可以,队列就是:可以指定这个环形缓冲区里每一个元素多大,有多少个元素。...假设读到了一个数据,头、尾就是这样的: 这时候如果我再写一个数据,头和尾就是这样的: 对于队列操作,我们一般来说是往尾部上数据, 但是也可以说:我这个数据比较着急处理,我可以写到头部去。...我们再来看看任务1,任务2不到数据就休息了,任务1数据后发生了什么事? task1队列,会去队列的这个链表:xTasksWaitingToReceive,挑出一个任务把它唤醒?...问: 队列,如果这个任务的优先级最高,会立即唤醒? 答: 假设task2队列,因为没有数据正在休眠, task1队列, task2优先级比task1高, task2会立刻被唤醒、立刻执行。...问: 一个任务想去队列,但是队列里没有数据,就休眠,这个休眠的时间可以选择? 答: 可以选择。 0:没有数据我就返回一个错误,即刻返回。

40140

缓存和数据库一致性问题,看这篇就够了

如果的业务处于起步阶段,流量非常小,那无论是请求还是请求,直接操作数据库即可,这时的架构模型是这样的: 但随着业务量的增长,的项目请求量越来越大,这时如果每次都从数据库中读数据,那肯定会有性能问题...之后的请求读到的都是旧数据,只有当缓存「失效」后,才能从数据库中得到正确的值。 这时用户会发现,自己刚刚修改了数据,但却看不到变更,一段时间过后,数据才变更过来,对业务也会有影响。...可见,先删除缓存,后更新数据库,当发生「+」并发时,还是存在数据不一致的情况。...到这里可能会问,消息队列也有可能会失败啊?而且,引入消息队列,这又增加了更多的维护成本,这样做值得?...(符合我们重试的场景) 至于队列失败和消息队列的维护成本问题: 队列失败:操作缓存和消息队列,「同时失败」的概率其实是很小的 维护成本:我们项目中一般都会用到消息队列,维护成本并没有新增很多 所以

46410

socket是并发安全的

并发写到加锁队列后由一个线程处理 于是在gateway层,多个用户线程同时消息时,会去争抢某个socket_fd对应的队列,抢到锁之后就数据到队列。...TCP Socket是线程安全的? 在前面有了socket是线程安全的结论,我们稍微翻一下源码就能发现,socket其实也是加锁了的,所以并发多线程socket这件事是线程安全的。...单线程socket_fd后写入加锁队列 读写UDP Socket是线程安全的? 聊完TCP,我们很自然就能想到另外一个传输层协议UDP,那么它是线程安全的?...会有一样的问题? 我们跟TCP对比下,大家就知道了。 TCP不能用多线程同时和同时,是因为它是基于数据流的协议。 那UDP呢?它是基于数据报的协议。...虽然线程安全,但依然不建议这么做,因为TCP本身是基于数据流的协议,一份完整的消息数据可能会分开多次去/,内核的锁只保证单次/socket是线程安全,锁的粒度并不覆盖整个完整消息。

1.6K10

【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!

作者个人研发的在高并发场景下,提供的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。...就只是让简单的说说事务的基本概念?基本概念相信是个学过数据库的小学生都会,面试官为什么会问你这个问题呢?此时,需要揣测面试官的心理。...此时的面试官其实想问你的不久是事务的基本概念,而且他也想让说出事务的特性,也就是四大属性。这才是这个问题的核心所在! 对于第二个问题:并发事务会带来哪些问题呢?就只是想问一下会带来哪些问题?...以下四种不同的隔离级别限制由低到高,性能从高到底。 未提交 未提交(Read Uncommitted):允许脏读取,但不允许更新丢失。...这可以通过“共享锁”和“排他锁”实现。读取数据的事务将会禁止事务(但允许事务),事务则禁止任何其他事务。 可避免 脏、不可重复读, 不可避免 虚。MySQL采用可重复读。

39440

这个点,在面试中答出来很加分!

那么,socket是并发安全的?能让这多个线程同时并发? 并发读写socket TCP Socket是线程安全的? 对于 TCP,我们一般使用下面的方式创建 socket。...TCP Socket是线程安全的? 在前面有了 socket 是线程安全的结论,我们稍微翻一下源码就能发现,socket其实也是加锁了的,所以并发多线程 socket 这件事是线程安全的。...单线程 socket_fd 后写入加锁队列 读写UDP Socket是线程安全的? 聊完 TCP,我们很自然就能想到另外一个传输层协议 UDP,那么它是线程安全的?...会有一样的问题? 我们跟TCP对比下,大家就知道了。 TCP不能用多线程同时和同时,是因为它是基于数据流的协议。 那UDP呢?它是基于数据报的协议。...虽然线程安全,但依然不建议这么做,因为TCP本身是基于数据流的协议,一份完整的消息数据可能会分开多次去/,内核的锁只保证单次/socket是线程安全,锁的粒度并不覆盖整个完整消息。

42120

【RTOS训练营】定时器的机制、源码分析和晚课提问

分为两类: 第一类:启动、停止、设置定时器: 在上图里面,左边的各种函数:实质都是一个队列 右边的任务,去队列,根据队列的数据:来启动、停止、设置定时器 第二类: 怎么判断定时器是否超时?...: 1.其他任务调用xTimerStart,实际上是队列 2.定时器任务:队列 3.根据队列数据,把定时器放入链表 定时器的函数什么时候被调用?...问: 调用"start"函数 执行"start"函数队列 唤醒定时器任务 处理"start命令"启动定时器? 还是说执行"start"函数定时器立即启动? 答: 1.什么叫做启动定时器?...没有理解到多任务的实质:仍然以轮询的方式来思考 1.队列、等待、有数据就返回,或者超时返回 2.链表?...老师我可以这样理解 答: 管理定时器的函数是任务:比如xTimerStart只是函数,不是任务 xTimerStart进行队列操作,它只是队列

57210

面试题参考一

实际就是消息队列如何保证幂等性 数据库中出现脏数据    ( 1)比如你拿个数据要写库,先根据主键查一下,如果这数据都有了,就别插入了,update一下好吧    (2)比如你是redis,那没问题了...线程池阻塞队列有哪几种? LinkedBlockingQueue SynchronousQueue DelayedWorkQueue 优先队列了解?优先队列底层实现机制?...而读写锁(ReadWriteLock)在同一时刻可以允许多个线程访问,但是在线程访问时,所有的线程和其他线程均被阻塞。 AQS里的setState()是什么时候调用? 讲一下锁的升级策略?...提交,未提交,可重复读,串行 隔离级别的话是体现事务的隔离性和会出现的问题 幻是什么?RR隔离级别能解决幻?那RR隔离级别是怎么解决幻的?...当妻子打印程序员的消费记录清单时(妻子事务提交),发现花了1.2万元,似乎出现了幻觉,这就是幻。 不能,Repeatable Read 知道间隙锁?间隙锁的作用是什么?是怎么解决幻的?

40410

对线面试官 - 网络面试之进程间的通信

面试官:能简单聊聊进程间的通信方式? 派大星:可以的,主要方式为:管道、命名管道、消息队列、共享内存。 面试官:可以简单介绍一下这些通信方式? 派大星:好的。...但是如果管道满了,那么管道的操作就阻塞了,直到别人读了管道的数据;反之如果管道是空的,那么操作的管道就阻塞了。...管道是半双工的,就是数据只能流向一个方向,就比如说架设一个管道,只能一个进程,一个进程。...其它的和管道一样:一个进程,一个进程。也是半双工。数据只能单向滚动 然后聊聊: 消息队列 Linux的消息队列可以认为是一个链表结构。...面试官:不错,知道线程见如何切换?简单聊聊? 派大星:这个了解一些。简单的讲就是一个进程的多个线程间切换的时候就涉及到了上下文切换。

12010

高并发场景下缓存+数据库双不一致问题分析与解决方案设计

库存这一块,数据库的时候,直接更新redis缓存?实际上不是,因为没有这么简单。这里,其实就涉及到了一个问题,数据库与缓存双,数据不一致的问题。...不就是还没更新数据库的就查数据库读到旧数据?不就是因为读在更新前面了吗?那我就让排队执行呗。...如果一个内存队列可能积压的更新操作特别多,那么就要加机器,让每个机器上部署的服务实例处理更少的数据,那么每个内存队列中积压的更新操作就会越少。...对于单机器,如果有20个内存队列,每个内存队列,可能就积压5个操作,每个操作性能测试后,一般在20ms左右就完成。...三、总结 一般来说,就是如果的系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,那最好不要上述的串行化的这个方案,因为请求和请求串行化,串到一个内存队列里去,这样是可以保证一定不会出现不一致的情况

1.8K61

腾讯面试题目汇总

; – 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的命令; 完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的请求。...Kafka 那么快?...简单聊了下 未提交、已提交、重复读、序列化几种情况。...最早的数据库系统,只有读读之间可以并发,读写,,写写都要阻塞。引入多版本之后,只有写写之间相互阻塞,其他三种操作都可以并行,这样大幅度提高了InnoDB的并发度。...面试官提问 9:JVM 的垃圾回收机制了解? 标记-清楚算法、复制算法、标记-压缩算法、分代收集算法的实现原理。 一、 技术背景要了解吧 [二、 哪些内存需要回收?]

1.9K31

c#结构体与类的区别,及使用技巧 C#中的结构体与类的区别

那还用得着构造函数? 经常看到一些初学者在类的下面直接这样代码. ? 但是又有人会说了.诶, 那么为什么在声明类的字段的时候可以赋值呢?赋值表达式也是1个执行代码啊?为什么这样就不报错呢?...给你看看下面的代码 就会知道其中的真相了. ? 当我们使用C#编译器将这段代码编译为程序集的时候,看看微软为我们生成的代码吧. ? 展开构造函数,看看这里面有什么蹊跷吧!...关于构造函数当然还不仅仅如此.我们知道在类的构造函数中我们可以一些任意的代码(前提是符合C#语法啦),在结构体的构造函数中虽然也可以任意的代码.但是C#语法规定在结构体的构造函数中,必须要为结构体的所有字段赋值...我们完全可以在属性的set块里面什么都不,如果什么都不,那么属性还是在操作字段?...结构体不能从另外1个结构或者类继承,但是可以实现接口.特殊的是.虽然结构不能从别的类或者结构继承,但是所有的结构都默认从ValueType类继承,ValueType类再从Object类继承.所以结构体对象仍然拥有超类

1K31

2013年,我有点喜欢编程了

知乎上有一个热门问题:的编程能力从什么时候开始突飞猛进? 初看到这个问题,我的嘴角微微上扬。记忆闪回到了2013年,那一年,命运给我了一点点正反馈,我有点喜欢编程了。...这次生产环境事故之后,内心一直有一个声音折磨着我:“ 遇到技术问题的时候,能不能从容一点,不慌乱。其他人可以做到的事,为什么我做不到。”...算奖服务是非常核心的服务,算奖服务包含若干子服务,其中竞彩算奖是用 C# 版本开发的系统。...领导也没有给我指导建议,于是我突发奇想:"生产环境不是有一两年的订单算奖历史数据 ?重构版本计算的结果和生产环境计算的结果做个对比,不就可以验证正确率?"。...于是,我将代码做了一些微调,将最后对数据的操作去掉,对比重构版本计算的金额和 c# 版本计算的金额,若金额有差异,订单数据写入到文本中,发送邮件告警。

29420

【RTOS训练营】队列的读写、休眠和唤醒、常规应用、使用和晚课提问

的时候,都是使用memcpy,那么复制多长的数据呢? 创建队列的时候就指定有每一个元素有多长。 二:队列的休眠和唤醒 下面我们来看看休眠和唤醒的操作。 队列队列的操作是很类似的。...: 图片 这函数就是覆盖的:要注意,能使用这个函数,前提是队列的长度只有1。...我们看到了覆盖:的时候比较特殊, 还有一个操作:的时候比较特殊。...图片 的时候,本来应该是这样的,先移动位置,读到数据: 图片 对于xQueuePeek,他是这样的: 图片 这两个特殊的操作、操作,组合起来就可以得到一个“邮箱”。...我们假设在中断里面队列: 1.写入了数据 2.导致一个优先级非常高的任务从阻塞变为了就绪 3.会马上调度? 4.不会,我的中断都还没执行完呢 5.怎么做?

98030

C#中的结构体与类的区别

a.在结构体中可以声明字段,但是声明字段的时候是不能给初始值的.所以当我们试图这样代码的时候,C#编译器在将源代码编译成程序集的是会提示语法错误. ?...那还用得着构造函数? 经常看到一些初学者在类的下面直接这样代码. ? 但是又有人会说了.诶, 那么为什么在声明类的字段的时候可以赋值呢?赋值表达式也是1个执行代码啊?为什么这样就不报错呢?...给你看看下面的代码 就会知道其中的真相了. ? 当我们使用C#编译器将这段代码编译为程序集的时候,看看微软为我们生成的代码吧. ? 展开构造函数,看看这里面有什么蹊跷吧!...关于构造函数当然还不仅仅如此.我们知道在类的构造函数中我们可以一些任意的代码(前提是符合C#语法啦),在结构体的构造函数中虽然也可以任意的代码.但是C#语法规定在结构体的构造函数中,必须要为结构体的所有字段赋值...我们完全可以在属性的set块里面什么都不,如果什么都不,那么属性还是在操作字段?

1.4K31

QT常见面试题,基础知识偏多

能举几个例子?还有其他的觉得自定义控件的方法主要是哪些?...能大致描述下? 答:根据对Qt事件机制的分析, 我们可以得到5种级别的事件过滤,处理办法. 以功能从弱到强, 排列如下: 1)重载特定事件处理函数....而不再局限于信号函数和槽函数) *参数可以是 typedef 的或使用不同的namespace specifier *可以允许一些自动的类型转换(即信号和槽参数类型不必完全匹配) 信号槽机制: 能说下的理解...QReadWriteLock类 》一个线程试图对一个加了锁的互斥量进行上锁,允许; 》一个线程试图对一个加了锁的互斥量进行上锁,阻塞; 》一个线程试图对一个加了锁的互斥量进行上锁,阻塞;、...》一个线程试图对一个加了锁的互斥量进行上锁,阻塞。

5.1K10
领券