自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 【js引擎】 quickjs 如何处理 async 函数

所以 quickjs 在执行完一次 func 后,还需要将内部的 promise1 拿出来,和自己保存的 promise2 建立一个联系。quickjs 的做法是,退出 func 时保存 func 的执行状态。promise 是如何接管接下来的异步操作的?而 promise1 的 then,其实就是将 promise2 的状态改变为 resolve 态。promise2 的 链式调用(相当于使用 then 注册的回调) 就是执行。调用 func 之后,我们期待的行为是这样的。也就是上面说的恢复执行函数。

2024-07-22 16:03:40 166

原创 【编程概念】同步、异步、阻塞、非阻塞

异步意味着,该工作我不会立刻做,可能会让别的 线程(乙方) 做,也可能我后续会做(事件循环),这由调度器来决定,这代表 process 和 task 是未知的执行流。事实上如果 read() 是阻塞调用的话那可以说这个异步,异步了个寂寞,还是会阻塞。第一步,使用 promise,优雅的将任务函数和回调函数合二为一,更重要的是,回调函数的相对位置在异步函数之后,这为顺序写异步代码提供了基础。会把 任务安排在任何一个线程,所以潜在的 callback 应该也是运行在别的线程的,这就有潜在的线程安全问题了。

2024-07-17 22:03:22 1030

原创 【编程概念】类成员函数设计

今天看公司代码,发现有一块代码很别扭。我思考了一下,感觉跟类的接口设计模式有关。在这里把思考过程贴出来分享一下。先给出一个暴论:类的成员函数越少越好。整个分析过程涉及:模块间交互的方式总结 和《effective c++》一书的原始代码大概是这样的。有一棵树,每个节点中存放了孩子和父亲。这里有问题的接口是 changeParent。,以调用 changeParent 的那个对象的视角来看,changeParent 干了如下几件事。

2024-07-15 23:44:08 756

原创 【随想】闲聊、沟通和谈判

所以沟通不是一轮两轮能够沟通好的。从这个角度上说,闲聊可以看作沟通的前奏,闲聊时可能碰撞出深层的问题出来,然后思考之后再进行沟通。谈判的目的是双方基于双赢的目的,为了协调不同利益,分配资源或者解决冲突,商讨一个双方都满意的协议。在双方都可承受的协议区间中极限压榨对方,让自己获得的利益最多,是谈判的核心目的。闲聊是进入沟通之前的铺垫,其说话基本上全是安全话题,没有明确的利益目的,唯一的目标是有话说,不冷场,你一言我一语,谁都能说两句。上级了解下级的想法,派发合适的任务以达到部门高效运行的目的,也是沟通。

2024-07-13 23:00:09 138

原创 【编程概念】生命周期

对象在某些情况下,由于数据同步等原因,是不可以被修改的,这时候就需要禁用掉对象修改的功能。所以在销毁时,没有真正的销毁,而是设置一个标志位,等资源创建完成后再销毁。我理解的对象生命周期周期,就是一个对象从创建到销毁的所有状态,对象在不同的状态下会有不同的行为。例如,为了监控性能和程序执行情况,需要在应用创建时打一个时间点,在应用显示时再打一个时间点,应用销毁时打一个时间点。设计生命周期就是定义程序在不同的时机下,对自己所拥有的资源,可以做什么,不可以做什么。有了以上的知识,然后在工作中灵活的套用模型即可。

2024-07-12 15:09:28 257

原创 【随想】社交

这是事实,但是我在想,既然我不擅长社交,我又看了这么多书,那我心里是知道社交很重要,也有提高自己社交能力的欲望的,那我为什么还不去练习呢?思考之后,我觉得这是我本能的抗拒。我不喜欢社交,因为社交意味着牺牲自己的时间,去和他人呆在一起,而我更爱独处。我也不想练习社交,因为我怕学会了以后,随时而来的社交,会随时打断我原本的生活。我个人非常注重逻辑,让我自己从心里面认可一件事的价值很难。使用这个模型分析之后,我对自己反思后发现,我个人是对自己比较严厉的,渡过养成习惯的第一步:禁欲期,不是问题。

2024-07-12 00:55:08 148

原创 【随想】思考

人每天都会产生无数个想法,而且每个人经常会因为自己产生了绝妙的想法而惊叹不已。也有人会在睡觉前,因为脑海中有无数个想法而失眠。但这些想法就像做梦一样,梦醒之后,能记住的东西很有限。可能前天晚上脑海中想到一个能够解决困扰已久问题的想法,第二天醒来却不记得了,甚至会因此懊悔,早知道先在纸上记下这些想法就好了。但事实上,我认为就算记下来也没用。这些想法统称为胡思乱想。那么思考到底是什么?

2024-07-10 19:29:14 370

原创 【编程概念】所有权

今天工作时遇到一个对象泄露的 bug,我想都没想就在函数中把该对象释放掉,解决了这个对象的泄露。但是第二天我又重新思考了一下,原来的改法太过随意了,并且这个问题引发了我对这一概念的思考,在这里分享一下。这个 bug 的代码核心是这样的。在上面的代码中,getObj函数创造的对象没有被释放,导致内存泄露了。现在提出一个问题,假设释放该对向的方式是freeObj(),我应该在funcA还是funcB中释放该对象呢?我最初的想法是在funcB。

2024-07-09 15:20:48 972

原创 【随想】对于“理解”的理解

首先,理解是对别人思想或者自然现象的理解。对别人说出的观点,提出的概念,或者自然现象的成因有一个自己的理解。如果是是自己提出的内容,那叫发明创造不叫理解。当然发明创造可以建立在对其他事物的理解之上。例如:建立一个模型,来解释一个某一个自然现象为什么会发生。或者解释为什么别人会有这样的观点。可以通过提出并回答一些本质的问题,来确认自己是否真正理解了。对事物的理解有两个层次。想要理解一本书,第一个层次是能够回答与这本。第二个层次是要理解书籍的底层架构。的问题,更深的层次是能够回答。我认为,理解的本质是能够。

2024-07-09 13:53:19 121

原创 【设计模式】六大设计原则

毕竟现实中都是实在的量,接口有几个参数,我继承了几个类,等等。所以我要说的是,如果违背原则的代价可以承受,那就可以违背原则。更注重设计的利弊思辨,而不是一个固定的答案。我认为仔细揣摩这六大原则,使用六大原则来分析23种设计模式的利弊,才是学习设计模式的正途。所以,如果几个职责的实现不会有太大变化,或者这些职责只在一个地方用的时候,违背这个原则也无碍。六大设计原则,是针对面向对象的设计模式的原则,也就是针对 封装、继承和多态 的使用原则。但说到底,职责的划分也是设计,把两件事当做一个职责也不是不可能。

2024-04-12 23:22:27 869

原创 【操作系统】中断、驱动程序与 signal 处理函数

中断是 cpu 与外设打交道的重要方式。计算机有多重多样的外设,例如:键盘、鼠标、硬盘、显示器等。除了 cpu 向这些外设传输数据外,这些设备也会向 cpu 传输数据。学习后发现,中断的理解与驱动程序的理解关系密切。并且中断与信号处理函数有很大的相似性,本文将讨论这三者的相关问题。

2024-03-06 00:00:06 840

原创 【js】js 异步机制详解 Generator / Async / Promise

对应quickjs 相当于将 pc 指针 和 参数 信息,local_buf,保存在对应的函数对象 (实际上保存在 StackFrame 中) 内,而 cur_ref 信息 quickjs 本身就已经保存了。可能协程和 setjmp/longjmp 可以辅助我们思考生成器的实现,但还是不能直接对应到生成器函数的行为。以及如何将 async 函数翻译成一个 promise 的形式,需要深入理解 then 函数。都说 async 函数返回一个 promise,它返回的 promise 到底是什么?

2024-01-20 18:07:41 1081

原创 leetcode竞赛:85 场双周赛

链接:https://leetcode.cn/contest/biweekly-contest-85/模拟列项正向维护分裂数组的最大值:二分,lower_bound。日期:2022年08月20日。

2023-10-19 11:50:03 175

原创 【算法深入浅出】字符串匹配之 KMP 算法

kmp 算法思想就是使用已匹配的前缀字符串,从中抽取出前后缀的重叠部分信息,用以减少字符串匹配中的回退,从而达到加速的作用。其实现有两个坑,一个是next 数组含义的准确定义(我的定义应该和书上不一样),第二个坑就是使用内循环来多次使用 next 数组跳转。其中第二个坑相信大家自己写都能意识到,第一个坑才是决定你能不能写出来的关键因素。我的实现可能不是最好的,但是希望能够好懂一点。kmp 算法已将前缀信息使用到了极致,还有一些别的字符串比较算法要比 kmp 容易一些,比如 sunday 算法等。

2023-09-26 00:27:35 247

原创 【算法证明 七】深入理解深度优先搜索

深度优先搜索包含一个递归,对其进行分析要复杂一些。与上一篇文章一样,还是给节点定义几个状态,然后详细分析深度优先搜索算法有哪些性质。

2023-06-24 21:37:07 581

原创 【算法证明 六】深入理解广度优先搜索

看了算法导论,才知道自己理解的深搜、广搜有多肤浅。接下来两篇文章将深入探索图搜索算法的方方面面,不再局限于做出简单的图搜索算法,而是站在图搜索算法上深入思考。本问将证明广度优先搜索求最短路的正确性。而下一篇文章将使用深度优先搜索实现强连通分量算法的正确性。

2023-06-24 01:02:57 436

原创 【算法证明 五】并查集的时间复杂度

S1S2SkS1​S2​...Sk​和一组元素e1e2ene1​e2​...en​,某一个元素在同一时刻只能属于一个集合,即集合之间是不相交的。Makee用元素e开一个集合Make(e)用元素e开一个集合Makee用元素e开一个集合UnionS1S2将两个集合合并Union(S_1, S_2)将两个集合合并UnionS1​S2​将两个集合合并Finde返回元素。

2023-06-23 15:52:41 1293

原创 【算法证明 四】摊还分析

按照算法导论的顺序,下面该介绍数据结构,动态规划,贪心算法了。但是基本的数据结构比较简单,靠数学直觉也能很好的理解,就不总结了。动规和贪心是那种听懂很简单,用起来很难得算法,准备放在后面总结。摊还分析对一般人来说是比较新奇得技术,应该比较少的人会注意到这类问题,而且与图相关的算法复杂度分析经常遇到需要摊还分析的情况。所以接下来两节准备总结下摊还分析的技术和思考逻辑。并先用该技术来证明的算法复杂度。

2023-06-23 12:50:25 466

原创 【操作系统】MIT xv6 lab3 pagetable

最近做了 MIT 的操作系统课程。操作系统的前置课程是 体系结构 或者 组成原理。由于我刚搞完 伯克利的 CS61C,感觉自己的基础相当扎实了,做操作系统应该是手到擒来了。但我还是低估了操作系统的难度,主要是代码的复杂度。MIT 的前两个 lab 还算比较简单。第三个 lab 直接炸了。10 几个小时没搞出来。里面有一些坑和理解错误的地方,在这里做一个记录,也帮助一下后来人。但是希望后来人尽量自己做,就算做不出来也要自己思考、尝试 10 小时以上再看答案。

2023-06-21 22:55:12 898 8

原创 【算法证明 三】计算顺序统计量的复杂度

其作用是求解一个数组中第 k 大的数字。常见的算法是基于 partition 的分治算法。不难证明这种算法的最坏复杂度是Θn2。但是其期望复杂度是Θn。另外,存在一种最坏复杂度是Θn的算法,其设计和证明思路比较有意思,拿来说一下。

2023-06-04 21:40:57 521

原创 【算法证明 二】快速排序的时间复杂度分析

快速排序是一种分治算法。选取主元后,将数组使用 partition 算法根据主元分割成两半,再对两半分别进行排序。假设左半边数量为q,则右半边数量为n−q−1。

2023-05-27 22:48:48 1713

原创 【算法证明 一】排序算法下界

众所周知,基于比较的排序算法的下界是Onlogn)),那么如何证明这个问题呢?今天知道了一个知识点叫:观点是廉价的,重要的是论证。所以准备对以前学过的算法进行几次刨根问底,就从排序算法的下界开始吧。证明方法来自《算法导论》

2023-05-25 00:21:02 651

原创 leetcode竞赛:20220918周赛

整体比较简单。

2022-09-18 20:29:35 247

原创 leetcode竞赛:87 场双周赛

leetcode 周赛。

2022-09-18 10:26:29 885

原创 leetcode竞赛:310 场周赛

这周赛做的很憋屈。。

2022-09-11 14:54:30 156

原创 leetcode竞赛:309 场周赛

本次题目比较难,体现在中等题比较难。困难题的模拟需要两个堆,思维量也比较大。

2022-09-04 14:27:25 977

原创 leetcode竞赛:86 场双周赛

leetcode竞赛:20220904双周赛。

2022-09-04 13:39:12 985

原创 leetcode竞赛:308 场周赛

leetcode算法周赛,简要记录。

2022-08-28 20:04:43 142

原创 leetcode竞赛:307场周赛

就不贴链接了,leetcode直接搜题目就行。

2022-08-23 22:35:40 255

原创 【算法与数据结构】 二分思想

二分思想是很常见的一种思想,也很好理解。而其难点是在于实现。整理一些需要二分思想的题目,代码实现详细注释版,供学习。

2022-08-22 23:06:48 98

原创 spdlog库学习(五):其他小功能

例如:第一章 Python 机器学习入门之pandas的使用示例中,周期性刷新时间的设置只演示了一个接口接口定义在spdlog.h 实现在spdlog-inl.h还是调用了registry的接口,我们关注得是这个值有什么用registry中的该接口实现如下从代码中看到,只是创建了一个periodic_flusher_这个对象,类型为periodic_worker。看名字也知道是周期性的执行一个函数,函数就是clbk。peridoic_worker是如何实现的呢?定义在periodic_worker

2022-06-26 21:27:16 2357 4

原创 spdlog库学习(四):logger

上一篇学习了spdlog库的默认日志输出流程。默认的日志输出使用的logger并无特殊,只是其sink使用了。给出的示例中还给出了另外的用法。包括:手动创建控制台日志、文件日志包括很多种:基本文件日志、循环文件日志、每日日志文件。接下来主要学习这几种日志。示例中其他列出的功能会在后续的文章中学习。手动创建控制台日志的方法如下:该方法一个模板,定义在,接口定义如下:实现在这里这个是什么用法暂时不知道。但我们知道Factory默认类型是,从名字知道是同步工厂。通过该工厂创建的logger都是即时输出的。其

2022-06-26 16:40:10 3980

原创 spdlog库学习(三):运行

示例中的程序,可以通过教程简单的编译出来执行结果如下:输出好像并没有自带代码行号,不过应该可以自行配置吧不知为何,bench目录中的 CMakelist.txt不能直接使用。通过先安装这个库,再使用g++编译运行以下四个文件,有两个文件因为缺少头文件编译出错另外两个程序运行如下benchasync_bench该方法用于估计自己程序中的效率。以如下参数运行该程序,结果如下普通用法不考虑日志等级,代码中展示了两种输出日志的方式:仅字符串输出和格式化参数输出,对应代码如下:知识点:regi

2022-06-03 18:12:04 2331

原创 spdlog库学习(二):目录结构

对spd源码库目录结构进行分析,通过代码量和目录名来分析模块的重要程度

2022-06-02 22:55:19 679 2

翻译 spdlog库学习

对spd日志库的文档的翻译,其中会其中一些不懂的点或者想法会进行标注。

2022-06-02 22:51:01 2020

原创 编写partition算法以及随之而来的快速排序与顺序统计量,c++迭代器实现

partition算法partition算法是将数组中以其中某一个数(pivot)为限制,将数组分为两部分,前半部分小于它后半部分大于他,而枢轴(就是pivot)在中间并返回枢轴的算法。该算法在很多地方会用到,比如说:快速排序和求顺序统计量伪代码PARTITION(A, p, r)1.x = A[r]2.i = p - 13.for j = p to r - 14. if ...

2019-08-29 22:05:39 571

原创 C++ primer plus 第十四章课后编程练习参考

C++ primer plus 书已经看到第14章,明显感觉到难度上升,也同时在逐渐逼近C++的核心内容课后编程参考如下:14.1//wine.h#ifndef WINE_H_INCLUDED#define WINE_H_INCLUDED#include <string>#include <valarray>#include <iostream>...

2019-01-16 21:44:38 329

原创 2019.1.16 c++学习错误和问题和知识点总结

1.编译错误error: binding ‘const Person’ to reference of type ‘Person&’ discards qualifiers|意思是在进行函数传参时,不能把常变量(这里是常引用)传递给非常变量(Person&,这里是非常引用)2.还有大量模板、多重继承的问题需要熟练...

2019-01-16 21:29:10 547

原创 2019.1.15 c++学习错误和问题和知识点总结

1.私有继承犯了曾经写过的问题对于基类成员的访问要通过作用域运算符的方式调用基类方法,PairArray::first()[i]报错方式:error: no matching function for call to ‘Pair<std::valarray, std::valarray >::Pair(int&)’|意思是没有对应的函数(这里是强制转换函数),该问题至此仍...

2019-01-15 21:53:02 128

原创 2019.1.14 c++学习错误和问题和知识点总结

cstring 的新方法:while (strchr("wstq", choice) == NULL)//返回字符 choice 在字符串"wstq"中第一次出现的地址,没有则返回NULL{ cout << "Please enter a w, s, t, or q: "; cin >> c

2019-01-14 21:40:07 191

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除