第21月第4天 leetcode codinginterview c++

1.leetcode

Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack.

https://blog.csdn.net/freeelinux/article/details/60472659

http://www.cnblogs.com/willaty/default.html?page=2

python

https://www.cnblogs.com/Lin-Yi/

2.coding interview

https://github.com/fangniu/TargetOffer/

3. c++

陈硕

多线程服务器的常用编程模型

https://www.cnblogs.com/Solstice/category/290530.html

小米面试总结
 
       总结一下前段时间小米面试的题目吧,考察了很多C11的新特性,由于自己也没怎么准备,而且公司只准使用C99开发,所以很多都忘记了,答的并不是很好在这上面,所以自己也需要重新回顾下C11的知识点了。
       有时间也会将C++重新回顾的知识重点写成博客,供大家一起学习,有错误的地方希望指正,共同进步,因为有些问题是我自己总结的,所以难免会有错!!!
1.STL中的容器vector,size和capacity的区别?
解释:size是已存在vector中的元素数目,而capacity则是在不分配新的内存空间的前提下最多可以保存的元素数目,如果从重新分配了内存一般是以原内存的2倍方式增长。
2.如何避免C++中的隐式转换?
解释:在构造函数中可以通过explicit声明为显示转换,函数中可以参考http://blog.csdn.net/LaineGates/article/details/50599218
3.了解MVC框架么?和你的ESP框架有什么不同么?
解释:其实ESP采用的就是MVC框架,也就是模型(model)-视图(view)-控制器(controller)。百度解释如下:
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
          其实用我个人编程角度解释就是,模型相当于一个对象或者说我们需要实现的具体逻辑业务,而视图可以理解为界面,也就是说我们需要处理的逻辑业务通过Html界面显示即视图,而控制器可以理解为通过Html界面传过来的路由即action,后台处理界面传过来的数据处理部分即可以理解为控制器。
4.你了解vector的内部实现么?
解释:vector是动态增加内存大小的,所谓动态增加并不是指在原空间之后持续新空间(因为无法保证原空间之后尚有可配置的空间),而是以原大小的2倍另外配置一块新的空间,然后将原内容拷贝过来。然后才在原内容之后构造新数据,并释放原空间。因此一旦内存被重新分配,则指向容器的迭代器,指针和引用都会失效。
5.2选1编程题不查网络,①实现scope_ptr内部实现②关于视频方面的,矩阵变换方面的题(用代码实现)
6.往verctor中添加一个元素,size会变大,capacity也会变大么?如何实现的?
解释:size是肯定会变大的,而capacity要看情况,如果已经满载的情况,那么capacity会变大,并且为2倍扩容,如果内存空间足够,那么capacity不会变大,总之capacity大于或等于size。
7.删除一个迭代器,还能使用么?
解释:对于序列式容器(如vector、queue)删除迭代器,会使后面所有元素的迭代器都失效,对于关联容器(如map、set等)删除迭代器,只会使当前迭代器失效(和内部实现有关系,关联容器红黑树存储)
8.Apache和ESP有什么区别?Appweb和Httpd有啥区别?

解释:因为apache没使用过,所以没总结。

9.调用一个普通函数和调用系统函数有啥区别?
解释:简单解释为普通函数调用发生在用户态,而系统调用发生在内核态,系统调用都会为用户提供系统接口(API),来维护内核的稳定和安全性。比如:我们开启一个进程那么会调用系统函数fork(),又比如printf底层调用的是write函数。
函数库调用
系统调用
在所有的ANSI C编译器版本中,C库函数是相同的
各个操作系统的系统调用是不同的
它调用函数库中的一段程序(或函数)
它调用系统内核的服务
与用户程序相联系
是操作系统的一个入口点
在用户地址空间执行
在内核地址空间执行
它的运行时间属于“用户时间”
它的运行时间属于“系统时间”
属于过程调用,调用开销较小
需要在用户空间和内核上下文环境间切换,开销较大
在C函数库libc中有大约300个函数
在UNIX中大约有90个系统调用
典型的C函数库调用:system fprintf malloc
典型的系统调用:chdir fork write brk;
10.为什么要使用虚函数?
解释:降低了耦合度,使代码模块实现分层,增加模块之间可扩展性和可维护性
11.说说静态库和动态库的区别
解释:静态库发生在编译和链接时期,也就是在链接过程中将目标文件(.o文件)一起打包到可执行文件中,所以静态库的体积会比较大,所以静态库比较浪费空间和资源,而动态库是在程序运行时动态载入的,灵活性更大,有利于程序更新、以及代码改动,因为如果是静态库需要重新全部编译。
12.还是静态库和动态库,假如一个程序调用了A和B两个静态库,A和B再调用C静态库,请问能编译通过么?为什么?
解释:不能,因为会出现重复定义,这也就是为什么会有动态库了
13.了解C++11的nullptr和C99里面的指针NULL赋初始值为0的区别么?
解释:nullptr就代表一个空指针常量,而C99里面的NULL指针在C99中是被定义为0的,为什么引入nullptr主要是解决C++中重载带来的二义性。具体参考博客https://www.cnblogs.com/nothx/p/8523191.html
14.你们为什么要选择Appweb而不是Apache?
解释:因为我们是嵌入式开发,而Apache太大我们并不需要,Appweb的功能能满足我们的需求。
15.你了解map么,请问内部实现是什么?(红黑树存储的,问关于红黑树的实现)
解释:这个网上很多,不在博客中说了。
16.SPS是什么?PPS是什么?SPS和PPS的区别?
解释:SPS为序列参数集,PPS为图像参数集。SPS包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id、帧数及POC的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识等。PPS对应的是一个序列中某一副图像或者某几幅图像,参数如标识符pic_parameter_set_id、可选的seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等。
17.AVC和SVC的区别?
解释: H.264SVC (Scalable Video Coding)是以H.264为基础,在语法和工具集上进行了扩展,支持具有分级特性的码流,H.264SVC是H.264标准的附录G,同时作为H.264新的profile。H.264SVC在2007年10月成为正式标准(具体见这篇博客https://www.cnblogs.com/huxiaopeng/p/5653310.html
18.讲一下对于AAC的了解
解释:这个百度下
19.讲一下H264中的VCL和NAL
解释:VCL为 视频编码层,NAL为网络提取层
20.你知道普遍的音频采样率为多少么?为什么?
解释:常用的音频采样频率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,因为人耳所能正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该是正常人听觉的2倍。
21.你了解可视电话么,一般采样率是多少?
解释:8khz
22.PTS和DTS是什么?
解释:PTS为显示时间戳,DTS为解码时间戳
23.音频(AAC)和视频(H264)的time_base是多少?
解释: h264随着帧率变化例如1:25 aac根据采样率变化例如1:44100
24.给一个视频分辨率(720x576),你知道大概带宽和码率么?
 

https://blog.csdn.net/longbei9029/article/details/79561579

android

https://blog.csdn.net/liangxiaozhang/article/details/17071223

stl

http://fpsalmon.usc.es/manuales/STL/STL_doc/Vector.html

https://blog.csdn.net/jmh1996/article/details/77968364

https://blog.csdn.net/wenqian1991/article/details/19540385

http://www.cnblogs.com/runnyu/default.html?page=1

time_wait

https://blog.csdn.net/usbdrivers/article/details/9294993

动态规划

https://blog.csdn.net/u013616945/article/details/77531097

getClimbingWays

https://www.sohu.com/a/153858619_466939

http://ykksmile.top/posts/55495/

面试

https://blog.csdn.net/hackbuteer1/article/details/7348968

c++11

https://book.douban.com/subject/26419368/

Buffer::Buffer() {
maxBuffer_ = ;
} void Buffer::enqueue(int client) {
unique_lock<mutex> lck(mutex_);
while (queue_.size() >= maxBuffer_) queueNotFull_.wait(lck); queue_.push(client);
queueNotEmpty_.notify_one();
} int Buffer::dequeue() {
unique_lock<mutex> lck(mutex_);
while (queue_.size() == ) queueNotEmpty_.wait(lck); int client = queue_.front();
queue_.pop();
queueNotFull_.notify_one();
return client;
}

https://github.com/SchuylerGoodman/messaging_service

拷贝控制(copy control)

copy control 是拷贝 stack a; stack b = a; 和赋值 stack b; b = a; 的合称。

当拷贝一个 ADT 时会发生什么?比方说拷贝一个 stack,是不是应该把它的每个元素按值拷贝到新 stack?

如果语言支持显示控制对象的生命期(比方说C++的确定性析构),而 ADT 用到了动态分配的内存,那么 copy control 更为重要,不然如何防止访问已经失效的对象?

由于 C++ class 是值语义,copy control 是实现深拷贝的必要手段。而且 ADT 用到的资源只涉及动态分配的内存,所以深拷贝是可行的。相反,object-based 编程风格中的 class 往往代表某样真实的事物(Employee、Account、File 等等),深拷贝无意义。

C 语言没有 copy control,也没有办法防止拷贝,一切要靠程序员自己小心在意。FILE* 可以随意拷贝,但是只要关闭其中一个 copy,其他 copies 也都失效了,跟空悬指针一般。整个 C 语言对待资源(malloc 得到的内存,open() 打开的文件,socket() 打开的连接)都是这样,用整数或指针来代表(即“句柄”)。而整数和指针类型的“句柄”是可以随意拷贝的,很容易就造成重复释放、遗漏释放、使用已经释放的资源等等常见错误。这方面 C++ 是一个显著的进步,boost::noncopyable 是 boost 里最值得推广的库。

http://www.cppblog.com/Solstice/archive/2011/08/16/153593.html

我们首先想到指针,在accept内部new生成一个对象,然后返回指针。但是问题更多,这个对象何时析构? 过早析构,程序发生错误,不进行析构,又造成了内存泄露。
这里的解决方案就是智能指针,而且是引用计数型的智能指针。
typedef boost::shared<Socket> SocketPtr;
SocketPtr accept();
这样外部就可以用智能指针去接收,那么何时析构?当然是引用计数为0,也就是我不再需要这个Socket的时候析构。
这样,我们利用了SockerPtr,实现了跟Java类似的Reference语义。

https://www.zhihu.com/question/20368881

linux多线程默认栈大小和最大线程数

https://blog.csdn.net/cherish_2012/article/details/45073399

上一篇:Photoshop调色教程:简单打造酷宝宝效果


下一篇:tcpdump+wireshark抓包分析