- 博客(84)
- 收藏
- 关注
转载 Docker入门
Docker学习笔记Docker的安装教程for Windows。Docker的安装教程for Ubuntu。Docker的菜鸟教程。阮一峰的Docker入门教程。为什么需要用Docker容器?环境配置的难题:程序换一台机器需要配置各种环境, 主要包括操作系统、 各种库和组件、 各种依赖和环境变量。虚拟机有几个缺点:相对于一个小程序,光是启动虚拟机所占资源比...
2018-11-14 12:40:00
123
转载 ROS入门学习
ROS学习笔记ROS入门网站;ROS入门书籍ROS主要包含包括功能包、节点、话题、消息类型和服务;ROS功能包/软件包(Packages)ROS软件包是一组用于实现特定功能的相关文件的集合,包括可执行文件和其他支持文件。所有的 ROS 软件都是一个软件包或其他软件包的一部分。每个程序包由一个清单文件(文件名为 package.xml)定义。该文件定义关于包的一些细...
2018-11-10 17:39:00
538
转载 Mudo C++网络库第十一章学习笔记
反思C++面向对象与虚函数C++语言学习可以看《C++ Primer》这本书;在C++中进行面向对象编程会遇到其他语言中不存在的问题, 其本质原因是C++ class是值语义, 而非对象语义;朴实的C++设计实用当头, 朴实为贵, 好用才是王道;C++ 是一门(最)复杂的编程语言, 语言虽复杂, 不代表一定要用复杂的方式来使用它;不一定非得有基类和派生类的设计才是好设计...
2018-10-25 14:05:00
209
转载 Mudo C++网络库第十章学习笔记
C++编译链接精要C++语言的三大约束: 与C兼容, 零开销(zero overhead)原则, 值语义;兼容C语言的编译模型与运行模型, 也就是锁能直接使用C语言的头文件和库;头文件包含具有传递性, 引入不必要的依赖;头文件是在编译时使用, 动态库文件是在运行时使用, 二者的时间差可能带来不匹配, 导致二进制兼容性方面的问题;C++的编译模型C++ 继承了单遍编译...
2018-10-24 19:00:00
257
转载 Mudo C++网络库第八章学习笔记
muduo网络库的设计与实现muduo是基于Reactor模式的C++网络库;Reactor的关键结构Reactor最核心的是事件分发机制, 即将IO multiplexing拿到IO事件分发给各个文件描述符(fd)的事件处理函数;每个Channel对象自始至终只负责一个文件描述符(fd)的IO事件分发, 但它并不拥有这个fd, 也不会在析构的时候关闭这个fd;Time...
2018-10-24 10:48:00
244
转载 Mudo C++网络库第七章学习笔记
muduo编程示例muduo库是设计来开发内网的网络程序, 它没有做任何安全方面的加强措施, 如果在公网上可能会受到攻击;muduo库把主动关闭连接这件事分成两步来做:如果主动关闭连接, 会先关本地写端, 等对方关闭之后, 再关闭本地读端;muduo Buffer类的设计与使用muduo输入输出缓冲区的设计与实现;Unix/Linux上的五种IO模型:阻塞(bl...
2018-10-24 10:12:00
422
转载 Mudo C++网络库第六章学习笔记
muduo网络库简介高级语言(Java, Python等)的Sockects库并没有对Sockects API提供更高层的封装, 直接用它编写程序很容易掉到陷阱中;网络库的价值还在于能方便地处理并发链接;网络核心库muduo是基于Reactor模式的网络库, 其核心是个事件循环EventLoop,用于响应计时器和IO事件;muduo采用基于对象(object-based...
2018-10-23 13:59:00
204
转载 IOT相关协议
MQTT协议的入门入门教程;发布/订阅(Pub/Sub)模式,方便消息在传感器之间传递;这意味着发布者和订阅者之间并不需要直接建立联系;消息类型MQTT拥有14种不同的消息类型:CONNECT:客户端连接到MQTT代理CONNACK:连接确认PUBLISH:新发布消息PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复PUBREC:QoS 2消...
2018-10-14 20:18:00
115
转载 Mudo C++网络库第五章学习笔记
高效的多线程日志日志(logging)有两个意思:诊断日志(diagnostic log), 常用日志库提供日志功能;交易日志(transaction log), 用于记录状态变更, 通过回放日志可以逐步恢复每一次修改后的状态;日志通常用于故障诊断和追踪(trace), 也可用于性能分析;日志通常是分布式系统中事故调查时的唯一线索, 用来追寻蛛丝马迹, 查出原凶;Lo...
2018-10-14 16:30:00
195
转载 Mudo C++网络库第四章学习笔记
C++多线程系统编程精要学习多线程编程面临的最大思维方式的转变有两点:当前线程可能被切换出去, 或者说被抢占(preempt)了;多线程程序中事件的发生顺序不再有全局统一的先后关系;当线程被切换出去回来继续执行下一条语句(指令)的时候, 全局数据(包括当前进程在操作系统内核中的状态)可能已经被其他线程修改了;访问非法地址, 会产生段错误(segfualt);在没有适...
2018-10-11 22:56:00
242
转载 Mudo C++网络库第三章学习笔记
多线程服务器的适用场合与常用编程模型进程间通信与线程同步;以最简单规范的方式开发功能正确、线程安全的多线程程序;多线程服务器是指运行在linux操作系统上的独占式网络应用程序;不考虑分布式存储, 只考虑分布式计算;进程与线程进程(process)是操作系统里最重要的两个概念之一(另一个是文件), 粗略的讲, 一个进程是"内存中正在运行的程序";每个进程有自己独立的地址...
2018-10-10 22:51:00
194
转载 Mudo C++网络库第二章学习笔记
线程同步的精要并发有两种基本的模型:一种是message passing(消息传递);另一种是shared memory(共享内存);在分布式系统中(有多台物理机需要通信), 运行在多台机器上的多个进程只有一种实用模型:message passing(消息传递), 因为多个物理机基本上不能共享内存;并发(concurrency);线程同步的四项原则, 按重要性排列:...
2018-10-07 20:26:00
278
转载 商汤一面面经(软件开发)
商汤面试C++11中智能指针的原理, 使用和实现商汤一面面经(软件开发)我是面的C/C++, 大部分时间是问项目, 中间问了几个技术问题, 但有一个没有回答上,直接被挂掉;怎么让浮点数向上取整;int(a+0.5);怎么保存大的浮点数用字符串保存;C++怎么实现多态用virtual(虚函数)+指针或引用;代码实现一下;为什么多态的析构函数必须为虚函...
2018-09-27 11:12:00
346
转载 排序代码总结
8大排序算法的总结常见算法思想;简介插入排序冒泡排序直接插入排序折半插入排序归并排序快速排序希尔排序堆排序直接选择排序稳定性比较快速排序、希尔排序、堆排序、直接选择排序不是稳定的排序算法;基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法;稳定排序的意思是: 假设在待排序的文件中,存在两个或两个以上的记录具有相同的关键字,在用某...
2018-09-25 17:26:00
139
转载 2018顺丰的电话面试
顺丰的电话面试程序的地址空间(栈, 段, 堆, 静态数据段, bbs段, 代码段(.code)), const变量保存在那个段中;static无论是全局变量还是局部变量都存储在全局/静态区域,在编译期就为其分配内存,在程序结束时释放;const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放;但const局部变量存储在栈中,代...
2018-09-19 23:10:00
217
转载 2018百度校招面试总结
2018百度校招面试总结目前走流程到二面, 写一波面经希望能够收到三面通知, 上天请赐予我运气和力量吧;校招走流程的两个面试官都很nice, 比较随和, 面试体验非常好;百度一面在酒店一楼等面试官通知, 叫到名字就坐电梯去对应房间号面试;交完简历, 面试官会安静的浏览简历(这时候比较尴尬, 只有静静的等), 然后面试官会让你简单的自我介绍;面试官后面会对感兴趣的项目进行...
2018-09-18 15:10:00
133
转载 2018网易的初级游戏开发工程师的面经
2018网易的初级游戏开发工程师的面经自我介绍: 先是自我介绍, 简单介绍了一下自己的项目经历, 会什么技术(自己认怂, 说了非科班出身, 技术不咋地);然后问我, 有看那些计算机相关的书籍; 自己却只回答了一本书, 简直是失败呀;好的自我介绍是一个好的面试的开始, 所以自我介绍一定要有底气, 不管是大厂还是小公司都要自信, 这点很重要;然后是问我多态的具体实现;没有把...
2018-09-18 09:46:00
329
转载 2018百度云面试总结
2018百度云校招面试总结在这个面试体验感很不舒服, 有压力面试的感觉;总结起来人家对我的项目一点不感兴趣, 面后台的岗位都会很难;现场笔试题树的和为k的所有路径树的先序遍历, 注意到递归结束条件我代码写出来了, 但涂涂改改有点乱, 而且当时自己也不太确定, 就直接给面试官说给他讲思路, 代码应该是错的;这里犯了一个特别大的错误, 就是不够自信, 一不自信就会...
2018-09-17 23:02:00
265
转载 剖析epoll机制
剖析epoll机制Linux epoll机制;写这篇文章的原因是, 上次百度面试被问到一个事件怎么添加到epoll的双向链表中的; 这个问题比较深入, 涉及到内核的实现问题, 今天就来理解一下;epoll和select/poll完全不同, epoll通过在Linux内核中申请一个简易的文件系统(文件系统一般用什么实现? B+树);B+树, 相当于一个2-3的扩展, 一个节点可...
2018-09-16 23:06:00
130
转载 Hash之哈希表的详解
Hash算法Hash算法的原理;决绝冲突的办法是:线性探查法;双散列函数法;拉链法处理碰撞;哈希原理及实现;哈希表-Hash table, 也叫散列表;转载于:https://www.cnblogs.com/longjiang-uestc/p/9656521.html...
2018-09-16 16:41:00
110
转载 平衡二叉树
高级树的总结参考《邓俊辉的数据结构》AVL(Adelson-Velskii 和Landis)树AVL(Adelson-Velskii 和Landis)树是带有平衡条件的二叉查找树, 保证树的深度为O(logN);左右子树具有相同的高度, 高度差最多差1, 用一次或两次旋转操作维持平衡状态;理想平衡和适度平衡的概念: 二叉搜索树的性能主要取决于高度, 固在节点数目固定的前提...
2018-09-16 15:59:00
300
转载 C++怎么实现线程安全
muduo库学习笔记1-C++多线程系统编程网上都说这本书很适合初学者入门学习, 我今天开始准备从头再来;第一章线程安全的对象管理对象的生与死不能由对象自身拥有的mutex(互斥器)来保护;如何避免对象析构时可能存在的race conditon(竞态条件)是C++多线程编程面临的基本问题, C++借用shared_ptr和weak_ptr完美解决;shared_ptr和w...
2018-09-14 10:02:00
9079
转载 Linux内核之进程地址空间
Linux内核之进程地址空间内核中的函数以相当直接了当的方式获得动态内存:__get_free_pages 或 alloc_pages从分区页框分配器中获得页框;kmem_cache_alloc或kmalloc使用slab分配器为专用或通用对象分配块;vmalloc获得一块非连续的内存块;返回一个页描述符地址或线性地址;内核是操作系统中优先级最高的成分;内核信任自己;...
2018-09-12 10:18:00
132
转载 Linux内核之内存管理
Linux内核之内存管理Linux利用的是分段+分页单元把逻辑地址转换为物理地址;RAM的某些部分永久地分配给内核, 并用来存放内核代码以及静态内核数据结构;RAM的其余部分称动态内存(dynamic memory); 整个系统的性能取决于如何有效的管理动态内存;尽力优化对动态内存的使用, 尽量做到需要时使用, 不需要时释放;内核如何给自己分配动态内存: 页框管理和内存区...
2018-09-12 09:35:00
154
转载 内存管理之内存寻址
内存寻址操作系统本身不必完全理解物理内存;理解分页单元的一般原理, 又要更好地研究内存寻址技术在其他平台是如何实现的;内存管理其实可以分成三个部分: 内存寻址, 内核给自己分配主存, 内核怎样给进程分配线性地址;三种内存地址逻辑地址(logical address): 包含机器语言指令中用来指定一个操作数或一条指令的地址;在分段结构中表现出来: 由一个段(segmen...
2018-09-11 10:35:00
460
转载 Linux内核初探
内存管理之内存寻址内存管理是迄今为止Unix内核中最复杂的活动虚拟内存: 所有新近的Unix系统都提供一种有用的抽象, 叫作虚拟内存(virtual memory);虚拟内存可以理解为一种逻辑层;处于应用程序的内存请求与硬件内存管理单元(Memory Management Unit, MMU)之间;虚拟内存有很多用途和优点:若干个进程可以并发地执行, 每个进程通过虚...
2018-09-10 23:03:00
158
转载 进程间通信
进程间通信(InterProcess Communication)讲得很好的链接进程间通信的概念每个进程各自有不同的用户地址空间, 任何一个进程的全局变量在另一个进程中都看不到, 所以进程之间要交换数据必须通过内核, 在内核中开辟一块缓冲区, 进程1把数据从用户空间拷贝到内核缓冲区中, 进程2再从内核缓冲区中把数据读走, 内核提供的这种机制称为进程间通信(IPC, InterPr...
2018-09-07 16:36:00
129
转载 epoll机制详解
epoll机制详解大牛的详解epoll详解什么是epoll?epoll是为处理大批量句柄而作了改进的poll, 是性能最好的多路I/O就绪通知方法;只有三个系统调用: epoll_create, epoll_ctl, epoll_wait;epoll_ctl - epoll的事件注册函数,它不同于select()是在监听事件时告诉内核要监听什么类型的事件,而是在这里先注册...
2018-09-07 16:03:00
434
转载 RT-thread嵌入式操作系统相关的问题
面试中问到 RT-thread嵌入式操作系统相关的问题RT-thread操作系统调度器的实现细节RT-Thread中提供的线程调度器是基于优先级的全抢占式调度:在系统中除了中断处理函数、调度器上锁部分的代码和禁止中断的代码是不可抢占的之外,系统的其他部分都是可以抢占的,包括线程调度器自身。系统总共支持256个优先级(0 ~ 255,数值越小的优先级越高,0为最高优先级,255...
2018-09-07 08:03:00
361
转载 重载和重写的区别
重载和重写的区别重载重载的定义是: 允许存在多个同名函数, 而函数的参数列表不同(参数个数不同, 参数类型不同, const也是可以重载的);重写重写是指子类重新定义父类的方法; (多态 -- vitual 和 指针或引用实现)从原理上分析重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说是这样的);如...
2018-09-06 17:32:00
80
转载 Linux内核设计与实现之虚拟文件系统的读书笔记
Linux内核设计与实现之虚拟文件系统的读书笔记虚拟文件系统(VFS) 为用户空间提供了文件和文件系统相关的接口.文件系统抽象层内核在底层文件系统上建立了一个抽象层, 该抽象层使Linux能够支持各种文件系统;VFS提供了一个通用的文件模型;解析用户空间执行一个write函数的过程:ret = write(fd, buf, len); 该系统调用将buf指针指向的长度为l...
2018-09-06 16:51:00
114
转载 初探Linux内核中的内存管理
Linux内核设计与实现之内存管理的读书笔记初探Linux内核管理内核本身不像用户空间那样奢侈的使用内存;内核不支持简单快捷的内存分配机制, 用户空间支持? 这种简单快捷的内存分配机制是什么呢?内核不能睡眠;内核空间和用户空间分配内存是不一样的, 差一点在哪里呢?内核是如何管理内存?内核把物理页作为内存管理的基本单位;因为内存管理单元通常以页为单位进行处理;从...
2018-09-06 15:12:00
198
转载 引用和指针
引用和指针引用和指针的区别什么?什么是引用, 声明和使用引用要注意哪些问题引用简单的理解就是某个目标变量的别名(alias), 对应用的操作与对变量直接操作效果完全相同;声明一个引用的时候一定要对其进行初始化, 引用声明完成后, 相当于目标值有两个完全不同的名称;引用本身不是一种数据类型, 因此引用本身不占用存储单元, 系统也不给引用分配存储单元;C++中引用的底层实现;...
2018-09-05 22:45:00
175
转载 C++面向对象的特点
C++面向对象的特点面向对象的特点主要有: 封装, 继承, 多态; 现在自己的简单理解如下, 但要明白具体怎么实现, 背后的原理是什么?什么是封装, C++怎么实现封装封装的大致可以分为: 函数的封装和类的封装, 函数的封装相当于把各个功能模块写成一个函数, 从上到下依次调用;类的封装:就是把变量和函数接口封装为一个class, 这种类就相当于一种类型, 可以声明这种类型的变...
2018-09-05 21:22:00
216
转载 new-delete-malloc-free关系总结
new-delete-malloc-free关系总结写在前面的话这个系列的笔记总结是根据网上的两篇基础拓展而来的C++经典面试题(最全,面中率最高)C++面试集锦( 面试被问到的问题 )面试中可以这样简单的回答new/delete会调用对象的构造/析构函数, 而malloc/free只会释放内存;malloc与free是C++/C语言的标准库函数,new/dele...
2018-09-05 17:03:00
206
转载 自己的真实面试
视源面试总结虚函数列表的结构(vptr) -- RTTI (Run-time type information 运行时刻识别)虚表(virtual table)和虚函数表, 存放着该类所有的虚函数对应的函数指针; 所以虚函数是占用内存空间的虚函数的实现的基本原理深入虚表结构派生类虚函数的构造过程: 虚函数替换过程发生在编译时拷贝基类的虚函数表(vptr)替换已重写虚函...
2018-09-05 15:09:00
149
转载 可穿戴项目总结
可穿戴项目总结项目背景和目的背景是我的毕业设计, 整个项目的架构是一个IOT的框架, 可穿戴设备采集数据, 手机app做一个数据中转作用, 服务器端做数据存储和处理.目的: 利用可穿戴设备长时间监测佩戴者的语音、行为、环境和体征的变化,看能不能和心理健康建立一定的联系; 我做的主要是自闭症倾向的研究。硬件部分用Altium Designer, 自己设计了4层板的PCB板,...
2018-08-26 23:13:00
1592
转载 2018年华为软件精英挑战赛总结
比赛总结这个比赛花了太多的时间,最后的结果还是有点遗憾赛题主要内容和目的初赛题目和内容预测云平台下给定连续时间内的虚拟机数量(15种不同虚拟机的类型), 并放置到给定容量大小的物理机上(cpu:64, mem:128)要求预测要准,放置要避免碎片(整个比赛可以分为两个部分: 预测 + 放置)预测部分预测部分,由于给的数据比较少, 最多不超过3个月的数据, 复杂的机器学习模...
2018-08-26 23:10:00
166
转载 2017华为软件挑战赛总结
2017华为软件挑战赛总结这次比赛是去年做的, 自己之前没有总结,现在才开始总结,很多东西快想不起来了,真是惭愧赛题主要内容和目的初赛题目和内容给你一个流网络(边有容量和单位流量费用),已知有一些节点有流量需求(消费节点),现要选一些节点部署服务器(服务节点),给消费节点传输流量,使得在满足所有消费节点流量需求的条件下,最小化成本(服务器购买成本+线路流量费用)服务器输出能力...
2018-08-26 23:07:00
204
转载 C++代码风格指南总结
C++代码风格指南代码风格的重要性今天我收到thougthwork笔试没过的消息, 心里确实很难受, 然后师兄说我代码写得很糟糕细想一下, 我写代码确实是随心所欲, 并没有遵循什么规范; 所以现在下定决心痛改前非;首先第一步是代码都自己一个字一个字的敲, 尽量减少Ctrl+C和Ctrl+V操作以后禁止使用tab键进行缩进,难道手敲四个空格会死么?避免代码冗长Google开...
2018-08-26 22:49:00
247
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅