我是靠谱客的博主 寒冷奇迹,最近开发中收集的这篇文章主要介绍【回眸】牛客网刷刷刷(四)软件工程(续)&ZooKeeper&字符串&链表(专题)前言知识点串烧面试反问阶段,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

本篇博客为笔者刷客观笔试题时做的一些记录以供以后复习时翻阅,如果能够帮到您是最大的荣幸!如果能给笔者一个三连将感激不尽!

知识点串烧

软件工程专题(续上篇)

有一些可维护特性是相互促进的,如:可理解性和可测试性可理解性和可修改性
而另一些则是相互矛盾的,如:效率和可移植性效率和可修改性等。 为保证程序的可维护性,应该在一定程度上满足可维护性的各个特性,但各个特性的重要性随着程序用途的不同或计算机环境的不同而不同。例如,对编译程序来说,效率和可移植性是主要的;对信息管理系统来说,可使用性和可修改性可能是主要的。
通过大量实验证明:强调效率的程序包含的错误比强调简明性的程序所包含的错误要高得多。因此明确软件所追求的质量目标对软件的质量和维护费用将产生很大的影响。

ZooKeeper专题

zookeeper=文件系统+通知机制

ZooKeeper服务端包含三种角色:
1、领导者Leader
2、学习者Learner
2.1 跟随者Follower
2.2 观察者Observer

Zookeeper-Stat 结构体成员
czxid 引起这个 znode 创建的 zxid,创建节点的事务的 zxid
ctime znode 被创建的毫秒数(从1970年开始)
mzxid znode 最后更新的 zxid
mtime znode 最后修改的毫秒数(从1970年开始)
pZxid znode 最后更新的子节点 zxid
cversion znode 子节点变化号,znode 子节点修改次数
dataversion znode 数据变化号
aclVersion znode 访问控制列表的变化号
ephemeralOwner 如果是临时节点,这个是 znode 拥有者的 session id。如果不是临时节点则是 0
dataLength znode 的数据长度
numChildren znode 子节点数量

字符串专题

char *string_a = (char *)malloc(100*sizeof(char));
char string_b[100]; 

string_a是一个char型的指针,在64位系统中sizeof(char*)=8
string_b是一个char型的数组,在64位系统中sizeof(char)=1,共100值因此为100

空串与由空格组成的串没有区别,错
空串:a=“没有东西”; 空格串:b=“空格空格”

串是一种特殊的线性表,其特殊性体现在数据元素是一个字符

字符常量存储为int类型(不是char类型),故’#’通常占用2或4字节。但实际上,只使用int的1个字节存储’#’的编码。
字符串”#”使用2个字节来存储:一个字节存储’#’的编码,一个字节存储的’’编码

%s:打印字符串时使用的转换说明。
%后加(数字)修饰符:表示打印的最小字段宽度,如%6s。
%后加(.数字)修饰符:对%s转换来说,表示待打印字符的最大数量,如%.3s。
%后加(-)修饰符:表示待打印项左对齐,即从字段的左侧开始打印该项,如%-6s。

char str[10];
cin>>str;
cin遇到空格便会停止读取

指针p指向字符串数组s,其实意味着指针p的地址为字符串数组s的首地址,因此*p的值为字符串数组s的第一个字符的值,即a,字符a+3则为ASCII值相加,因此相加的结果为d。

链表专题

单链表只能访问后继,无法访问前驱,不可以用尾节点循环头节点

往队列的队尾插入一个元素为入队,从队列的排头删除一个元素称为退队。
初始时 front=rear=0 , front 总是指向队头元素的前一位置,入队一次 rear+1 ,退队一次 front+1 。队列队头队尾指针相同时队列为空。而带链的队列,由于每个元素都包含一个指针域指向下一个元素,当带链队列为空时 front=rear=Null ,插入第 1 个元素时, rear+1 指向该元素, front+1 也指向该元素,插入第 2 个元素时 rear+1 , front 不变,删除 1 个元素时 front+1 。即 front=rear 不为空时带链的队列中只有一个元素。

在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,是线性表。在单链表中的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针),也是线性链表。循环链表具有单链表的特征,但又不需要增加额外的存贮空间,仅对表的链接方式稍做改变,使得对表的处理更加方便灵活,属于线性链表。二叉链表是二叉树的物理实现,是一种存储结构,不属于线性结构

一个非空的数据结构如果满足以下两个条件:有且只有一个根结点;每一个结点最多有一个前件(前驱),也最多有一个后件(后继),则称为线性结构,在数据结构中习惯称为线性表。双向链表结点具有两个指针域,属于线性结构。
循环链表所有结点的指针域都为非空,属于线性结构
循环链表是链表,循环队列属于队列,队列只能在队尾入队,在排头退队,链表可以在任何位置插入、删除
双向链表结点具有多个指针域,所以线性结构的存储结点也可以有多个指针。

单向不带头结点链表 判空:head==NULL
单向带头结点 head->next=NULL

单向循环不带头结点 head==NULL
单向循环带头结点 head->next=head

线性表可以没有元素,就是为空表的时候,选项B错误。
线性表中元素的排列不必须要顺序排列,选项C错误。
由线性表的基本原理可以知道,除了第一个元素无前驱,最后一个元素无后继,其他所有的元素都有一个直接的前驱和直接的后继。

链表只能顺序查找 定位一个元素的时间为O(N),删除一个元素的时间为O(1)

线性表有两种存储方式,一种是顺序表一种是链式表,只有用顺序表时,逻辑顺序才和物理顺序一致

链表中的结点可含多个指针域,分别存放多个指针。例如,双向链表中的结点可以含有两个指针域,分别存放指向其直接前趋和直接后继结点的指针。

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置) 其数据元素没有特定的类型限制。

链式存储结构不同于顺序存储结构,它的存储空间可以是不连续的,并且数据节点的存储顺序与数据元素之间的逻辑关系可以不一致,数据元素之间的逻辑关系是由指针域来确定的。 因此采用线性链表表示一个向量时,占用的存储空间地址可连续可不连续。
链式存储结构和顺序存储结构的区别: 顺序存储结构就是用一组地址连续的存储单元依次存储该线性表中的各个元素。由于表中各个元素具有相同的属性,所以占用的存储空间相同。 线性表按链式存储时,每个数据元素 (结点)的存储包括数据区和指针区两个部分。数据区存放结点本身的数据,指针区存放其后继元素的地址只要知道该线性表的起始地址表中的各个元素就可通过其间的链接关系逐步找到。 优缺点比较: 顺序存储需要开辟一个定长的空间,读写速度快,缺点不可扩充容量(如果要扩充需要开辟一个新的足够大的空间把原来的数据重写进去) 链式存储无需担心容量问题,读写速度相对慢些,由于要存储下一个数据的地址所以需要的存储空间比顺序存储大。

线性表的顺序存储结构具备如下两个基本特征:①线性表中的所有元素所占的存储空间是连续的;②线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。用一组任意的存储单元来依次存放线性表的结点,这组存储单元既是可以使连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。

散列表的平均查找长度依赖于散列表的装填因子
对包含n个元素的散列表进行检索,平均检索长度不直接依赖于n
冲突是不可避免的,与装填因子无关
装填因子越大,发生冲突的可能性越大;反之发生冲突的可能性越小。

顺序表:随机访问;
链表:顺序访问。

MI面试专题

冯诺依曼结构的计算机硬件逻辑组成中有五个部件:输入设备 输出设备 存储器 控制器 运算器

递增选择排序:第一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的末尾,以此比较直到最后一个数

银行家算法用于预防死锁

构造函数:先有基类构造,再有派生类构造。派生类可以对基类构造函数进行重载。
析构函数:从派生类先开始析构,再析构基类。
因为派生类构造函数是重载的,所以要先析构。 二者的过程是相反的。

在C++中不能重载的运算符只有5个:
1、. (成员访问运算符)
2、.* (成员指针访问运算符)
3、:: (域运算符)
4、sizeof (长度运算符)
5、?: (条件运算符)

DNS 域名解析的默认端口是53

各类排序法的时间复杂度
在这里插入图片描述
ps -ef和ps -aux都能查看当前系统中运行着哪些进程
“ps -aL | grep 进程名”可查看主线程中有哪些子线程

函数参数是局部变量,局部变量存于栈区。

Linux 中有很多命令可以用来查看磁盘、CPU 和内存使用率。
查看磁盘使用率:
df -h : 查看所有文件系统的磁盘使用情况,-h 选项可以使输出结果以人类可读的形式显示。
du -sh : 查看指定目录的磁盘使用情况,-s 选项只显示总和, -h 选项可以使输出结果以人类可读的形式显示。
查看 CPU 使用率:
top : 查看当前系统中所有进程的 CPU 使用情况,并以实时的方式更新。
htop : 与 top 类似,但更具可读性。
mpstat : 查看 CPU 在多核环境下的使用率。
查看内存使用率:
free : 查看当前系统的内存使用情况。
vmstat : 查看当前系统的内存、 CPU 使用情况以及进程的情况。
sar : 查看系统的资源使用情况。

32位处理器,计算机中的位数指的是CPU一次能处理的最大位数。 32位计算机的CPU一次最多能处理32位数据,例如它的EAX寄存器就是32位的,当然32位计算机通常也可以处理16位和8位数据

存储密度=单链表数据项所占空间/结点所占空间;
结点所占空间=数据项所占空间+存放后继结点地址的链域

如果需要从代码仓里下拉最新代码,需要什么命令?
git pull

面试反问阶段

您平时在公司的业务是什么?(岗位内容)

“我们做的xxxxxxxx的业务”。

您期望我在工作中能扮演一个什么的角色,能完成什么样的工作,并且具备什么样的技能?

“我面过的大部分实习生在学校中学习的都是基础知识,实际业务能力也是有限的,业务能力的培养还是需要结合工作场景。我更看重实习生的业务成长性,希望带出来的实习生在实习结束能够独立完成需求。我们部门是面向业务需求的,对底层源码可能没有了解的那么深入,虽然理解源码对个人成长很重要,但是我们更希望是能够利用好各自工具完成好需求,当然有的部门是深耕底层架构,他们就更看重底层源码,当然这个也要看不同的部门。”

可以问工作节奏,加班情况等等

最后

以上就是寒冷奇迹为你收集整理的【回眸】牛客网刷刷刷(四)软件工程(续)&ZooKeeper&字符串&链表(专题)前言知识点串烧面试反问阶段的全部内容,希望文章能够帮你解决【回眸】牛客网刷刷刷(四)软件工程(续)&ZooKeeper&字符串&链表(专题)前言知识点串烧面试反问阶段所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部