huihut / interview

📚 C/C++ 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。This repository is a summary of the basic knowledge of recruiting job seekers and beginners in the direction of C/C++ technology, including language, program library, data structure, algorithm, system, network, link loading library, interview experience, recruitment, recommendation, etc.

Home Page:https://interview.huihut.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[讨论] 本仓库的建议、讨论等方面

huihut opened this issue · comments

这个仓库原本只是我的个人笔记,鉴于越来越多人关注,而本人技术略渣,希望大家可以提些建议,或者可以在这个 issue 讨论些关于面试方面的东西。比如:

  • 需要增加什么知识点?
  • 如何分类排版才更高效地复习与检索?
  • 如何勘误,发现错误如何改正?(new issue、pull)
  • 如何提交或添加你的知识点、总结、面经?(new issue)
  • 等等

(本 issue 只涉及讨论、建议、疑问等方面,内容勘误、提交贡献还请新建一个 issue 或 pull)

面试时发现自己没啥项目经验,希望增加一些项目,只需给出项目的链接即可。

@96chh 看到你的一个repo,疑似广工校友? : )

关于项目经验,这个在简历中还是写自己做过的项目好,这里有几个可以看看:

另外,这个我就不加到仓库里了,因为这个太因人而异了,和面试知识关系不大。

希望能帮到你。

建议 @huihut
STL中的容器类型表,建议加上最差、平均的算法复杂度

@kelvinkuo 已添加,可以看看是否有错误

“带纯虚函数的类叫虚基类”这一描述怕是有误。虚基类,virtual base class,对应的概念是虚继承,跟纯虚函数没啥关系,含有纯虚函数的类叫抽象类或抽象基类,abstract base class,还有其他叫法么?

@xinghun 已改,感谢

新增语雀镜像仓库(C/C++ 面试基础知识总结),让想要右侧目录却又不喜欢装插件的朋友有了更多选择,同时语雀支持导出PDF、Word等功能。

Q:为什么 readme 文件这么长?
A:一级页和多级页各有优劣,但在快速查找知识点 (如电话面) 和全文搜索的时候,一级页有着多级页无法比拟的优势,因此本仓库的知识点主要集中在 readme 这个一级页中,所以 readme 才这么长。

💡 许多朋友都觉得 readme 实在太长了,因此现在做了两个版本:

默认主页面是合起来的 📘 目录,习惯了原来全部展开的朋友在 📖 README Details 页面阅读就好了。

💡 推荐使用右侧目录 jawil/GayHub TOC 导航,三秒定位知识点。

💡 还有把之前在顶部的这串内容也删了:

📚 C/C++ 面试基础知识总结,只为复习、分享。勘误新增请 IssuePR,建议、讨论请移步 issues/12,排版使用 中文文案排版指北,版权协议遵循 CC BY-NC-SA 4.0

萌即正义!
简洁即正义!

@lorenzorut 是常指针,不一定指向常对象

int a = 1;
const int b = 2;
const int *c = &a;    //正确
c = &b;               //正确
*c = b;               //错误

你可以看看 http://www.runoob.com/w3cnote/c-constant-pointer.html

嗯,明白你说的意思。我刚表述的也不是指一定指向“常对象”,我是把“常指针” 当成 “指针常量”了,然后发现原来你说的是“常量指针”,所以又删了。不过runoob的链接里面关于“指针常量”的表述反倒有误。

不过,关于“void function3(char* const Var); // 参数指针为常指针” 是否有误?
此处指针应为“指针常量”,而非“常量指针“? @huihut

又详细了解了下,发现“常指针” 等价于 “指针常量”,所以“void function3(char* const Var); // 参数指针为常指针” 此处无误。Var指针为指针常量,即常指针,指向地址不能更改,指向地址的内容可以修改。
void function()
{
// 对象
A b; // 普通对象,可以调用全部成员函数
const A a; // 常对象,只能调用常成员函数、更新常成员变量
const A *p = &a; // 常指针
const A &q = a; // 常引用
...
}
“const A *p = &a; // 常指针” 该处,仍然有误,p指针指向一个“常对象”,属于“常量指针”,指向内容不能更改,指向地址可以随意更改,而非“常指针” @huihut

@lorenzorut 常指针(const pointer) 等于 常量指针(const pointer) 不等于 指针常量(pointer to const)

我检查了一遍,仓库的 const 使用并没有错,你再想想或者网上找找教程吧。

另外,勘误最好创建一个新的 issue。

感谢分享

commented

在数据结构的链式结构里的linklist with head中,enqueue_Lq函数里,当L==null和当l->next ==null的逻辑是不是错了

@a74731248 已转到 issues#34 交流。

InsertSort第一层循环结束条件有错误。

@xindelvcheng 已改,感谢。

C实现C++类无法打开,显示404

@Medivhcrf 已更新,感谢。

建议加上多线程和并发编程的相关内容。如果内容太多,希望能列出一个相关书单,这样也可以弥补c++ primer的缺失。

@hbsun2113 好的,之后会考虑安排上,感谢。

details里面还有好多没展开啊,能否全部展开呢想打印一下,语雀还没更新。

@fighterhit 现在 details 展开了,语雀弃用,改用:https://www.huihut.com/interview

commented

可增加一下:linux下,内存泄露、踩内存、句柄泄露、死锁、死循环等问题检测的方法

虚函数在子类里面也可以不重载的;但纯虚函数必须在子类去实现。

其中的重载应该改为重写(override)吧。而且子类也不一定要实现纯虚函数吧,只是重写纯虚函数是实例化的前提。

@Mrtj2016 感谢。是重写;那句的原意都是指实例化的,但你一提还有歧义,所以改成 这样 ,你看看

commented

Effective C++ 条款31,“如果能过够” 是否应该是 ”如果能够“。

可以加上select,poll,epoll等的比较,还有redis等面试常问的

数据库关系数据理论里3NF应该是“消除 2NF 主属性对码的传递函数依赖”

int count = 0;        // 全局(::)的 count

class A {
public:
    static int count; // 类 A 的 count(A::count)
};

int main() {
    ::count = 1;      // 设置全局的 count 的值为 1

    A::count = 2;     // 设置类 A 的 count 为 2

    int count = 0;    // 局部的 count
    count = 3;        // 设置局部的 count 的值为 3

    return 0;
}

这里需要加上int A::count = 2;, 必须先在类外初始化吧

@DiDongDongDi 已改,感谢

const A *p = &a; // 常指针
此应该为指针常量或指向常量的指针(推荐)(pointer to const),而非常量指针(推荐)或常指针(const pointer)。
PS:当然实际pointer to const是指不能通过该指针修改指向的值,指向的值如果不是const依旧可以修改。
例子:
int a = 1;
int *b = &a;
const int *c = &a;
cout << *b << *c << endl; //11
*b = 2;
//*c = 2; //wrong
cout << *b << *c << endl; //22

const A &q = a; // 常引用
常引用用词不好,它的常跟常指针的常完全是相反意思,应该用指向常量的引用(reference to const),然而const reference毫无意义跟reference没区别,这里用词就很奇怪了。

另外建议规范和解释用词,本来it名词中文翻译就极其混乱,不同书中这2个概念都是不同的,甚至是反的,甚至有另外一套说法。

真是不想吐槽IT名词翻译之混乱了。

@VoidxHoshi 感谢,再次修改了下 const,不整那么多乱七八糟的,也在这里汇总一下:

  • 指针
    • 指向常量的指针(pointer to const)
    • 自身是常量的指针(常量指针,const pointer)
  • 引用
    • 指向常量的引用(reference to const)
    • 没有 const reference,因为引用本身就是 const pointer

建议将readme里面的图片链接换成国内链接,不然没有梯子的同学打开后可能是这样的:
1

我fork了一份到gitee,可以将README里面的https://raw.githubusercontent.com/huihut/interview/master/images
全部替换为
https://gitee.com/zhihuanchen/interview/raw/master/images

或者你自己在gitee里面fork一份也行。

TCP黏包这个概念,其实是不存在的。所谓黏包是程序员对TCP字节流的处理出现了错误。不知道作者对于这个怎么看?

commented

建议增加Linux开发常见的系统调用的总结,对于服务器端开发,epoll这样的系统调用非常重要。

建议把STL解析里的重复例子合并一下,增加可阅读性,比如array::begin 和 array::end。另外 array::cend 例子输出有误。应为 15 720 801 1002 3502

你好,我有个疑惑:基数排序的代码实现,用的更像是计数排序而不是桶排序,桶排序同一个桶是桶内有序的,而代码实现里好像没体现这一点

建议将readme里面的图片链接换成国内链接,不然没有梯子的同学打开后可能是这样的:
1

我fork了一份到gitee,可以将README里面的https://raw.githubusercontent.com/huihut/interview/master/images
全部替换为
https://gitee.com/zhihuanchen/interview/raw/master/images

或者你自己在gitee里面fork一份也行。

这个可以有,只是图片有点多,稍过一阵子有空的时候换上。
我看看是放到 gitee 或者 GitHub 上托管图片,还是放在图片外链的平台上托管。

可以把“21种设计模式”先完善完!

问题代码可以添加leetcode链接,方便看题解,只看代码的话有些不懂为什么。 或者觉得麻烦的话可以提示不清楚可以去搜关键字找题解

看到楼上提到设计模式,推荐这个网站,讲得很通俗易懂,分类清晰,附有伪代码和各种语言的实现,https://refactoringguru.cn/design-patterns

关于 typeid 部分,第二个列表项的 type_id 是否应该为 typeid?🤔

计算机网络那里,TCP应该端到端通信吧,ip协议才是点对点

关于C++ 纯虚函数,纯虚函数是可以在类外进行具体实现的定义,详见:https://stackoverflow.com/questions/2089083/pure-virtual-function-with-implementation