题目
摘抄一些面试题或者其他题目
三七互娱 2018 笔试题
转载自 三七互娱2018笔试题
三七互娱,一个小时,十个简答题,也许是想用时间先刷掉一批人吧。
一、指针和引用的区别?
指针可以不初始化,引用必须初始化。
指针可以改变其指向,引用一经引用,无法改变。
指针有二级指针,引用没有二级引用(C++11 标准除外)。
sizeof 一个指针,32 位机器下为 4 字节,sizeof 一个引用,求的是引用对象的字节数。
指针和引用在汇编上都是一样的,都是在栈上开辟一块内存,用于存放指向对象的地址。只不过是引用直接将引用对象的地址放入寄存器中,而指针则是先将自己的地址放进去,取得指向对象的地址。
二、单链表的逆置?
typedef struct Node
{
int data;
struct Node *next;
}Node,*List;
void ListRevers(List head)
{
assert(head!= NULL);
if(head==NULL || head->next==NULL)
{
return ;
}
Node *p = head->next;
Node *q;
head->next = NULL;
while(p != NULL)
{
q = p->next;
p->next = head->next;
head->next = p;
p = q;
}
}
三、内存分配的方式有几种?
静态存储区 栈 堆 的内存分配
从静态存储区域分配内存。程序编译的时候内存已经分配好了,并且在程序的整个运行期间都存在,例如全局变量。
在栈上创建。在执行函数时,函数内局部变量的存储单元可以在栈上创建,函数结束时这些存储单元自动被释放。处理器的指定集中有关于栈内存的分配运算,因此效率比较高,但是分配的内存容量有限。
在堆上分配内存,亦称动态内存分配,程序在运行的时候用 malloc 函数或 new 运算符申请任意大小的内存,程序员要用 free 函数或 delete 运算符释放内存。动态内存使用非常灵活,但问题也很多。
四、STL 中的容器有哪些,他们的特征?
顺序容器:vector,list,deque
关联容器:set,multiset,map,multimap
容器适配器:queue,stack
vector 的底层是一个动态开辟的可变长的数组,他的内存是连续的。定义一个 vector,在 32 位机器,VS 下,栈上的大小为 20 字节,五个指针。bool 类型的话为 24 字节。它所指向的堆上 vector 数组的初始大小为 0,每次呈二倍增长方式,VS 其实不为 2。他适合查找和以及尾插,尾删数据。
list 的底层是一个带头结点的双链表,他默认开辟一个头结点。可以使用 splice 方法,将一个链表上数据切下来链到另一个链表上。
deque 底层是一个动态开辟的二维数组,默认开辟的大小为,int size = 4096 > sizeof (Ty) ? 4096/sizoef (Ty) : 1。
五、20 个人轮流报数,数到 3 的人出局,求出局的序列?
void fun()
{
vector<int> ve(20, 0);
int num = 0;
while(num < 20)
{
for(int i = 0; i < 20; ++i)
{
if(ve[i] == 0) num++;
if(num == 3)
{
ve[i] = 1;
num = 0;
cout << i << " ";
}
}
}
cout << endl;
}
六、写出 String 类的构造,拷贝构造,赋值,析构函数?
class String
{
public:
String(const char *str)
{
if(str == NULL)
{
m_data = new char[1];
m_data = '\0';
}
else
{
m_data = new char[strlen(str) + 1];
strcpy(m_data, str.m_data);
}
}
String(const String &it)
{
m_data = new char[strlen(it.m_data) + 1];
strcpy(m_data, it.m_data);
}
~String()
{
delete[] m_data;
m_data = NULL;
}
String &operator=(const String &it)
{
if(this == &it)
{
return *this;
}
delete[] m_data;
m_data = new char[strlen(it.m_data) + 1];
strcpy(m_data, it.m_data);
return *this;
}
private:
char *m_data;
};
其次还有一道数据库的题印象颇深,剩余的题就没有什么了。
2018 三七互娱春招 C++ 笔试题
转载自 2018三七互娱春招c++笔试题
一共 10 道题,除了简答就是编程。
c++ 类的析构
delete 和 delete [] 的区别
++ 的使用
定义宏 ADD(a,b)为 a*b,放到运算中求值,题目要求输出这个值。
指针和引用的区别
代码定义了一个常量指针和一个指向常量的指针,问 2 个指针有什么区别
写函数:已知单链表表头 head,求倒数第三个数的值
写算法:20 个人围成一圈数数,数到 3 的人站出来,直到最后一个人站出来,输出站出来的人的序列
SQL 基本语句的使用
string 类的成员函数补全,包括 3 种构造函数和一种 = 的运算符重载。三种构造函数的分别为 string (),string (char *),string (strint&)
三七互娱 2020 年秋招面试题
转自 三七互娱面试题
自我介绍
面向对象特点,然后引申,类与类之间的关系,什么场景用继承,什么场景用包含~(不会)
进程和线程区别
线程状态,以及转换
创建多线程方式
sleep wait
mysql 优化方面
写 sql
写单例,口述一遍
redis 位图。
redis 8 种数据结构
redis 中 set 详细介绍 判断一个 key 在不在一个 set 里面的时间复杂度 (O (1) ), 我猜的。看来我们也得看看 redis 的源码了
持久化方式 - 磁盘怎么防止碎片 - vim 怎么整行删除 - CAS 底层通过什么实现 - 多个 Java 程序并发访问数据库,怎么实现数据库的线程事务安全 - 分布式怎么存储 Session - 为啥用 git 不用其他的 - CPU 为啥有多级缓存 - Socket 了解么 - ping 用到的协议 - Hashmap 在 1.8 以前怎么解决冲突的 - JDK 哪里用到享元模式、那里用到原型模式 - Springboot 为啥可以配置这么少就能用 - Spring 怎么解决循环依赖 - Mybatis 为什么实现接口就可以访问数据库 - linux 底层实现的 IO 模型,epoll 是什么 - 80486 变长还是定长
这个应该是 Java 的。