- 博客(77)
- 收藏
- 关注
原创 字节C++抖音直播一面-面经总结
大小可以动态改变,自动分配更多的内存。(但是建议reserve 因为有复制)可以存储基本类型 自定义类型 还可以存放对象可以对元素随机访问,支持下标直接访问自动处理内存分配和释放。
2024-09-29 10:32:25 427
原创 快手C++一面-面经总结
在这个模板类的析构函数中,如果创建新的shared指向同一个资源的时候,引用计数+1,但是离开作用域或者销毁,就会-1.当等于0的时候,就释放资源,销毁控制块。第二次握手:server收到,以自己的SYN为应答,把自己的初始化序列号发送回client,并且把client的初始化序列号+1作为ACK返回。RAII是资源获取就初始化,把资源的获取和释放绑定到对象的生命周期内,利用对象的构造函数和析构函数来管理资源。就是个模板类,可以管理动态分配的对象,template的typename指定管理的资源的类型。
2024-09-27 10:49:20 1320
原创 字节豆包C++一面-面经总结
lc206:链表反转:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。lc70爬楼梯进阶,爬楼梯高级进阶:一次可以跳1-n阶台阶爬楼梯原版:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?扩展:(ACM)
2024-09-26 10:36:58 1153
原创 LeetCode138 随机链表的复制
构造这个链表的 深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。一个<Node*,Node*>的哈希表 存原先的链表节点和现在的链表节点。返回复制链表的头节点。
2024-09-25 16:16:41 219
原创 Momenta中间件C++一面-面经总结
2 内存模型:C++ 的原子操作提供了几种内存序模型,例如 memory_order_relaxed、memory_order_acquire 和 memory_order_release,以控制操作的内存可见性顺序。在这个模板类的析构函数中,如果创建新的shared指向同一个资源的时候,引用计数+1,但是离开作用域或者销毁,就会-1.当等于0的时候,就释放资源,销毁控制块。就是个模板类,可以管理动态分配的对象,template的typename指定管理的资源的类型。中,并链接到程序的执行过程中。
2024-09-25 10:05:17 1041
原创 LeetCode146 LRU缓存
在LRUCache函数中 要clear哈希表,并且把tail加进双链表。在addNode中 如果有 可以直接返回 如果没有就需要弄个cur。在deltNode中 如果没有 可以直接返回 如果有就erase他。在put操作中,如果有,就先deletNode 再addNode。如果有 就要先给他deletNode 再给他addNode。如果等于容量:那就把tail前一个给他deleNode了。删除的操作就是把他的前后找到 然后前后接上 把他悬挂。在get操作中,如果没有这个 返回-1;
2024-09-24 16:47:22 501
原创 美团中间件C++一面-面经总结
2.服务端接收到 FIN,进入 CLOSE_WAIT 状态:服务端收到客户端的 FIN 报文后,向客户端发送一个 ACK 报文,确认收到了关闭请求。3.等待服务端关闭连接:服务端的应用程序此时应该执行关闭操作(通常调用 close() 函数),发送 FIN 报文给客户端,并完成整个连接的关闭过程。第二次握手:server收到,以自己的SYN为应答,把自己的初始化序列号发送回client,并且把client的初始化序列号+1作为ACK返回。它通过将文件的数据缓存到内存中,减少对磁盘的直接访问,提高读写速度。
2024-09-24 10:52:47 1319
原创 百度C++一面-面经总结
允许在同一个作用域中定义多个同名的函数或方法,但这些函数具有不同的参数列表。编译器通过参数的个数、类型或顺序来区分这些函数调用。这种机制使得函数可以根据不同的参数类型或数量实现不同的功能。函数名相同,但参数类型、数量或顺序不同。重写:则是继承中出现的子类重定义了方法,虚函数来实现,且需要在父类中声明为virtual。函数名、参数列表和返回类型必须与父类的虚函数一致。
2024-09-23 11:26:32 1197
原创 前置知识-系统/C
硬件系统和软件系统两大部分组成。计算机是构成计算机系统各功能部件的集合。是计算机完成各项工作的物质基础。计算机是指与计算机系统操作有关的各种程序以及任何与之相关的文档和数据的集合。硬件五大件:CPU(ALU CU) RAM ROM I/O设备软件:操作系统 语言处理程序 数据库程序 应用软件。
2024-09-05 09:29:51 1005
原创 定时器Timer-日志系统
因为http_conn对象是MAX_FD个(有限)所以如果长时间占用,就会浪费。则使用定时器定时关闭fd。信号处理函数利用管道通知主循环-----每当监测到有这个信号的时候,都会将这个信号写到pipefd[1]里面,传递给主循环。主循环收到信号对升序链表的所有定时器处理-----如果时间内没有交换数据,就关闭连接。
2024-09-02 09:39:40 332
原创 MySQL-CGI-响应报文
账号密码涉及到:与数据库已记录下来的进行校验。如果也是来一个新建一个连接,必然效率低。可以做一个数据库连接池,预生成数据库连接。如何生成数据库连接?下面的流程做很多次。然后放在链表中,(池))维护三个变量 最大连接数 可用连接数 当前已用连接数 (要上锁)1.使用mysql_init()初始化2.使用real_connect()建立连接3.使用query()查询4.使用store_result(mysql)获取结果集。
2024-09-02 09:27:21 563
原创 HTTP分析
用线程池(半同步版反应堆)来并发处理用户请求,listenfd上监听的通过accept接手之后,返回一个新的fd名为connfd用于和用户通信。I/O 多路复用监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程 / 线程。通过HTTP协议和客户端进行通信,接收,存储,处理HTTP请求,并且做出相应,给出图片,网页,视频,或者error。来了事件,我操作系统来处理,处理完通知应用进程,异步。IP+端口号,要TCP三次握手,然后生成HTTP请求报文,通过TCP/IP发送到服务器上。
2024-08-30 10:29:23 658
原创 webserver.cpp详解
>优雅关闭:根据m_OPT_LINGER的值设置套接字选项SO_LINGER。如果m_OPT_LINGER为0,表示优雅关闭,底层会尝试发送完所有未发送的数据再关闭连接。用于初始化数据库连接池。管道的使用:统一事件源,因为信号处理和IO处理不是一条路,而通过管道,信号处理的函数可以用管道传递给主循环,这样信号和其他fd都可以epoll检测,统一处理。m_pool是一个指向threadpool<http_conn>类的指针,它根据m_actormodel和m_thread_num参数初始化线程池。
2024-08-29 10:46:04 418
原创 webserver.h详解
目的是提供一个完整的Web服务器框架,包括网络监听、事件处理、数据库连接管理、线程池管理等功能。webserver.h头文件。
2024-08-28 10:22:11 243
原创 Main.cpp详解
调用server对象的eventLoop方法,这是服务器的主事件循环,它将处理所有网络事件,如客户端连接、请求等。创建了一个WebServer类的对象server,这个类可能包含了启动和管理Web服务器所需的所有功能。调用server对象的trig_mode方法,可能用于设置服务器的触发模式。调用server对象的sql_pool方法,可能用于初始化数据库连接池。调用server对象的thread_pool方法,可能用于初始化线程池。调用server对象的log_write方法,可能用于初始化日志记录。
2024-08-28 10:15:27 168
原创 config.h-config.cpp详解
而执行到recv时,os会直接把这个工作队列的进程移到socket的等待队列,所以这个既会被阻塞(等待接收),又不影响工作队列(不影响cpu)而epoll分开了。用epoll_ctl维护等待队列,用epoll_wait阻塞进程,(功能的分离)读一个fd,不管他可不可以读写,都会立刻返回,返回失败会设置errno码通知,而不是卡着不动。因为一个进程创建socket时候,os会给他创建一个由文件系统管理的socket对象,包括。读一个阻塞的fd时,如果没有数据可读,就会一直卡在调用函数上,一直等到可读。
2024-08-28 10:10:08 1090
原创 C++装饰模式Decorator
继承子一个父类Stream,里面又有个字段也叫Stream,绝大多数都是Decorator模式,(这是同时继承,同时组合)eg:一个流操作的代码(实际网络流的加密,文件流的加密,内存流的加密)加密操作都是一样的,但是流是不一样的。解决方法:**Decorator:**动态(组合)地给一个对象增加一些额外的职责。单一职责(如果责任不清晰,子类会急剧膨胀,而且重复代码,这时候就得划分单一的责任)总结:过度的使用继承,导致大量重复代码,子类急剧膨胀。原因是:对继承的不良使用导致的。上述eg的问题在于:子类的。
2024-08-21 11:02:55 146
原创 C++观察者模式Observer
但是如果文件太大了,我想分割,想要一个进度条。依赖倒置原则:高层模块不能依赖底层模块。是不是找filesplitter的父类就可以了呢?eg:做一个文件分割器,需要一个界面mainform。里面有文件路径,文件号。直接写一个IProgress类当抽象接口,然后多继承,然后重写、调用。只要这个对象状态发生改变,观察者对象都能得到通知。上图,从绿色到黑色。从不良耦合到良好耦合。Bar实际上就是一种通知,不需要一种。但是依赖关系要松耦合,不要太依赖。Bar上述这样就不可以,因为。了,这样是违背依赖倒置的。
2024-08-21 10:06:07 276
原创 C++策略模式Strategy
这样是:一段代码,又添上代码,前面的很可能出bug,这都不叫复用。不同于if else,(bad smell、还占用缓存)只要有if else就应该要想strategy重构。真正的复用,直接编译级复用。(strategy)但是如果if else绝对不变的情况,也可以用。现在可以弄个基类,几个派生类。(if else else)稳定的是红色,不稳定是蓝色。—策略模式strategy。各国的税,少了哪国就得。
2024-08-20 22:06:15 548
原创 C++模板方法TemplateMethod
23种设计模式分为九类1.组件协作2.单一职责3.对象创建4.对象性能5.接口隔离6.状态变化7.数据结构8.行为变化9.领域问题什么时候、什么地点用设计模式才是最重要的。关键的重构技法:静态-----动态早绑定—晚绑定继承-----组合编译时依赖------运行时依赖紧耦合----松耦合组件协作:通过晚期绑定,实现松耦合(就是用于协作)典型模式:模板方法template method(用早的库调用晚的应用,稳定中可以存在变化,稳定的写成非虚就行,必须要有稳定的东
2024-08-20 21:42:06 574
原创 C++设计原则
以前特别推崇类继承,但是这个是错误的,汽车可以继承于交通工具。例如在mainform就弄三个数据结构存东西,不太行。mainform依赖于shape,line和rect依赖shape。接口就应该小,而且完备,只做有必要的进public。mainform依赖line和rect这是不对的。变化就是类的责任,一个类一个责任。想着增加东西,而不是修改原有的。一个类仅有一个引起他变化的原因。对扩展是开放的,对更改是封闭的。封装的两侧,一侧变化,一侧稳定。针对接口编程,而不是针对实现。不然就是和父类没关系的。
2024-08-20 20:54:44 293
原创 C++设计模式简介
如果是第二种做法,一样也得写一个circle类,但是可以继承于shape父类,override一下自己的draw,第二种写法不用改变只有一个数据结构vector存shape。如果是第一种分而治之的思想,那么还得写个数据结构存circle,之后的实现也得写出来circle。针对圆形,还得具体实现。(半径、圆心等等)(很小的需求,要改的超级多)如何使用面向对象的机制来表达现实世界,这是最好的。每一个模式都描述了重复的问题,和解决的方案,所以就可以直接使用模式,而不是造轮子。引入了客户需求的变化,圆形怎么画?
2024-08-20 11:30:37 289
原创 Go项目布局
internal目录下放不希望外部访问的代码(业务)Go项目布局,自举语言,源码是靠Go自己实现的。所以Go源码可以参考作为项目布局。common目录下可以放直接。etc放配置文件yaml。import外部访问的。源码放在src目录下。
2024-08-19 16:38:22 135
原创 GoModule
所以:如果某一天mux包发布了v2.0.0版本,那么这时候主版本就是2,已经与v1.8.1和v1.7.1的主版本号不同了,那么v2.0.0与v1.8.1和v1.7.1就是不兼容的包版本。在项目开发中,如果升级了某个包的版本且新版本的包存在一些问题,比如对服务的整体性能产生了影响,我们可以手动的将它降级为之前发布的某个兼容版本。但是go get就可以下载依赖包,但是此时下载是最新的,如果后续更新引入了不兼容代码,那么将会无法编译成功。其实,在Go Module模式下,语义版本号主要由三部分组成,
2024-08-19 16:27:00 648 1
原创 Go第一个程序
并不是,因为程序启动要初始化,初始化内存,初始化栈,初始化调度器,这些都是go汇编完成的,而main函数是go的第一个执行的goroutine。可以提升代码的灵活性,重构也更容易,维护也没有负担。而且在编译期完成,不会对运行效率产生任何影响。上述很简单,如何使用os包获取命令行参数呢?:=只能在局部作用域内,而不能在全局,全局用。不用显示定义str类型,直接用:=即可。main包一个go程序只允许有一个。Go的程序执行入口是main函数吗?go程序可以任意导入包。go的类型推断的好处?就用小写单词命名的。
2024-08-19 15:30:38 277
原创 Go环境搭建-开发工具
官方下载地址:https://go.dev/dl/windows会自动设置环境变量,直接使用即可。截至2024.8.19,现有的版本是1.23。GOPRIVATE 安全校验,公司内部有用。GOMODCACHE 存储下载的包路径。1.11版本开始支持module。1.16版本默认开启module。GO111MODULE 构建模式。GOPROXY 配置代理。GOPATH 老构建模式。1.18版本支持泛型。
2024-08-19 15:09:59 148
原创 Go Roadmap-Basics中文笔记
地址:https://roadmap.sh/golang简介:Github star No.6 学习路线 Go 中译版。
2024-08-17 20:10:57 1101 1
原创 C++面向对象高级编程(I)侯捷 自我总结版
面向对象编程中,“Composition”(组合)是一种设计原则,它指的是通过将一个对象包含在另一个对象中来实现两个对象之间的关联关系。把构造函数以及拷贝构造弄到private中,别人没法创建对象,但是使用静态的a,public的get函数可以获得a。下图:写一个string类,先想想用什么装string,一般是用指针,不用指定多大。上图,看起来好像打破了封装,func直接用了c1,但是确实可以,因为friends。会发现,存两个位的复数,却用了64字节或16字节,因为有cookie(红色的)。
2024-08-03 09:22:52 795
原创 国科大作业考试资料《人工智能原理与算法》2024新编-第十三次作业整理
1、假设我们从决策树生成了一个训练集,然后将决策树学习应用于该训练集。当训练集的大小趋于无穷时,学习算法将最终返回正确的决策树吗?为什么是或不是?
2024-07-24 11:08:30 226
原创 国科大作业考试资料-人工智能原理与算法-2024新编-第十二次作业整理
袋子里面有3个有偏差的硬币a、b和c,抛掷硬币正面朝上的概率分别是20%、60%和80%。从袋子里随机取出一个硬币(3个硬币被取出的概率是相等的),并把取出的硬币抛掷3次,得到抛掷结果依次是X1 , X2和 X3。a. 画出对应的贝叶斯网络并定义必要的CPT表。b. 如果抛掷结果是2次正面朝上,1次反面朝上,计算取出的硬币最可能是哪一个。
2024-07-24 11:04:44 229
原创 国科大作业考试资料-人工智能原理与算法-2024新编-第十一次作业整理
1、有一位教授想知道学生是否睡眠充足。每天,教授观察学生在课堂 上是否睡觉,并观察他们是否有红眼。教授获得如下的领域知识:(1)没有观察数据时,学生睡眠充足的先验概率为0.7。(2)给定学生前一天睡眠充足为条件,学生在晚上睡眠充足的概率是0.8;如果前一天睡眠不充足,则是0.3。(3)如果学生睡眠充足,则红眼的概率是0.2,否则是0.7。(4)如果学生睡眠充足,则在课堂上睡觉的概率是0.1,否则是0.3。将这些信息形式化为一个动态贝叶斯网络,使教授可以使用这个网络从观察序列中进行滤波和预
2024-07-24 10:58:20 222
原创 国科大作业考试资料-人工智能原理与算法-2024新编-第十次作业整理
1. 对于下面的每个断言,或者证明其为真,或者给出一个反例: If P(a|b,c) = P(b|a,c), then P(a|c) = P(b|c) If P(a|b,c) = P(a), then P(b|c) = P(b) If P(a|b) = P(a), then P(a|b,c) = P(a|c)2. 证明乘法规则的条件化版本: P(X,Y|e) = P(X|Y,e) P(Y|e)
2024-07-24 10:51:44 60
原创 国科大作业考试资料-人工智能原理与算法-2024新编-第九次作业整理
1、将下面的描述逻辑表达式转换为一阶逻辑: 一个男人的集合,这样的男人至少有三个儿子且至多有两个女儿,儿子都失业了并与医生结了婚,女儿都是物理系或数学系的教授。 And(Man, Atleast(3,Son), Atleast(2, Daughter), All(Son, And(Unemployed, Married, All(Spouse, Doctor))), All(Daughter, And(Professor, Fills(Department, Physic
2024-07-23 16:12:17 77
原创 国科大作业考试资料-人工智能原理与算法-2024新编-第八次作业整理
假设有如下公理:0 ≤ 37 ≤ 9∀x x ≤ x∀x x ≤ x + 0∀x x + 0 ≤ x∀x,y x + y ≤ y + x∀w,x,y,z w ≤ y ∧ x ≤ z ≤ ⇒ w + x ≤ y + z∀x,y,z x ≤ y ∧ y ≤ z ⇒ x ≤ z请分别用反向链接和前向链接证明7 ≤ 3 + 9(注 意:只用上述公理,不要用其他的数学知识。)只需要给出关键步骤。
2024-07-23 16:02:53 69
原创 国科大作业考试资料-人工智能原理与算法-2024新编-第六次作业整理
1. 第6章课件中所描述的澳大利亚地图着色问题(三色)共有多少个解? 2. 如何通过使用辅助变量把诸如A+B=C这样的三元约束变成三个二元约束。假设值域是有限的。– 提示:考虑引进新变量表示变量对,引进约束如“X是Y变量对中的第一个元素”
2024-07-23 15:42:19 67
原创 国科大作业考试资料-人工智能原理与算法-2024新编-第五次作业整理
1、本题以井字棋(圈与十字游戏)为例练习博弈中的基本概念。定义X_n为恰好有n个X而没有O的行、列或者对角线的数目。同样O_n为正好有n 个O的行、列或者对角线的数目。效用函数给X_3=1的棋局+1, 给O_3=1的棋局-1。所有其他终止状态效用值为0。对于非终止状态,使用线性的评估函数定义为Eval(s)=3X_2 (s)+X_1 (s)-(3O_2 (s)+O_1 (s))2、下图给出了一个简单游戏的完整博弈树。假设叶结点的计算顺序是从左到右,而且在一个叶结点被评估之前我们对它一无所知,可能的取值范围
2024-07-23 15:40:09 210
原创 国科大作业考试资料-人工智能原理与算法-2024新编-第四次作业整理
生成大量的八数码问题和八皇后问题并用以下算法分别求解:(对于八数码问题,可以自定义合适的目标状态)1. 爬山法(最陡上升和首选爬山法)2. 随机重启爬山法3. 模拟退火算法计算搜索耗散和问题的解决率,并用图对比它们和最优解代价的曲线。对结果进行评估。
2024-07-23 15:35:52 91
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人