面经
哈希表的数据结构 --数组+链表
怎么理解容器和迭代器的关系,
容器是怎么实现接口的统一 ? --用到模板
用到了模板的什么性质?
--
didi
工作中有成就感的事情?
写了一个这样的脚本,工作中会使用shell语句较多,因为部门成立时间较短,有很多命令会重复执行,我在工作之余总结了下这些shell语句,可以一键执行好几个代码仓(如果成功就继续向下执行 ),不用人为的去移动各个代码仓生成的组件rpm包,并将含有修改的代码换到设备说,写了2天供大家使用,提高大家的工作效率
rpc通信框架?并说一下好处 相比于http https://www.zhihu.com/question/25536695
有用过程rpc框架吗
作者:洪春涛 链接:https://www.zhihu.com/question/25536695/answer/221638079 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
syn攻击的解决思路?
消息队列读写数据一致性的问题?
消息队列还有什么好处? -- 反压上层
不难的算法题:
最长不重复子串
utcode和utF8的区别, python 在这个上面还是有些不太友好的地方
更倾向于使用多线程还是多进程
想接触应用层的事,现在主要是IP层的事
如何自验证
百度地图
自定义的字符串类,只用写定义,不用写实现
构造、析构、拷贝构造、赋值、操作符等
class String
{
private:
char* _ptr;
size_t _size;
size_t _capacity;
static size_t npos;
public:
String()//无参构造,开辟一个字节空间
:_ptr(new char[1])
, _size(0)
, _capacity(0)
{
*_ptr = '\0';
}
String(const char* ptr)//带参构造
:_ptr(new char[strlen(ptr)+1])
,_size(0)
,_capacity(0)
{
strcpy(_ptr, ptr); //重新开辟空间 进行字符串拷贝
_size =_capacity= strlen(_ptr);
}
//此处复用带参构造开辟一个临时对象,进行交换
String(const String& str)//拷贝构造
:_ptr(nullptr)
,_size(0)
,_capacity(0)
{
String tmp(str._ptr);
Swap(tmp);
}
//此处复用拷贝构造创建临时对象str,进行交换
String& operator=(String str)//赋值运算符
{
Swap(str);
return *this;
}
const char& operator[](size_t n) const
{
assert(n < _size);
return _ptr[n];
}
//增容,注意循环进行拷贝,释放原有空间
void reserve(size_t n)
{
if (n > _capacity)
{
char* str = new char[n+1];//开新的空间
//拷贝内容,这里有bug,拷贝不到 /0
//strcpy(str, _ptr);
for (size_t i=0;i<_size;i++)
{
str[i] = _ptr[i];
}
delete[] _ptr;
_ptr = str;
_capacity = n;
}
}
//大于原有空间需要增容,空间够用需要用ch填充(memset函数)
void resize(size_t n,char ch='\0')
{
if (n > _capacity)
{
reserve(n);
}
if (n > _size)
{
memset(_ptr + _size, ch, n - _size);
}
_size = n;
_ptr[_size] = '\0';
}
//判断是否增容
void push_back(const char& ch)
{
if (_size == _capacity)
{
size_t new_capacity=_capacity == 0 ? 15 : 2 * _capacity;
reserve(new_capacity);
}
_ptr[_size] = ch;
_size++;
_ptr[_size] = '\0';
}
//析构
~String()
{
if (_ptr)
{
delete[] _ptr;
_ptr = nullptr;
_size = _capacity = 0;
}
}
size_t size() const
{
return _size;
}
size_t capacity() const
{
return _capacity;
}
void Swap(String& str)
{
swap(_ptr, str._ptr);
swap(_size, str._size);
swap(_capacity, str._capacity);
}
void append(const char* str)
{
int len = strlen(str);
if (len + _size > _capacity)
{
reserve(_size+len );
}
//尾插字符串
//strcpy(_ptr+_size,str);
_ptr[len + _size] = '\0';
while (len)
{
_ptr[len + _size-1] = str[len-1];
len--;
}
_size += strlen(str);
}
String& operator+=(const char& ch)
{
this->push_back(ch);
return *this;
}
String& operator+=(const char* str)
{
this->append(str);
return *this;
}
String& operator+=(const String& str)
{
append(str._ptr);
return *this;
}
//插入一个字符
void insert(size_t pos, const char& ch)
{
assert(pos <= _size);
if (_size == _capacity)
{
size_t newc = _capacity == 0 ? 15 : 2 * _capacity;
reserve(newc);
}
size_t end = _size;
while (end-pos)
{
_ptr[ end ] = _ptr[end - 1];
--end;
}
_ptr[pos] = ch;
_ptr[++_size] = '\0';
}
//插入一个字符串
void insert(size_t pos, const char* str)
{
assert(pos <= _size);
int len = strlen(str);
if (_size + len > _capacity)
{
reserve(_size + len);
}
size_t end = _size + len;
while (end>pos+len-1)
{
_ptr[end] = _ptr[end - len];
--end;
}
memcpy(_ptr + pos, str, len);
_size += len;
_ptr[_size] = '\0';
}
//删除指定位置指定长度
void erase(size_t pos,size_t len)
{
assert(pos < _size&&pos>=0);
if (pos + len >= _size)
{
_ptr[pos] = '\0';
_size = pos;
return;
}
size_t start = pos + len;
while (start<_size)
{
_ptr[pos++] = _ptr[start++];
}
_size -= len;
_ptr[_size] = '\0';
}
size_t find(const char& ch, size_t pos=0)
{
assert(pos < _size);
while (pos < _size)
{
if (_ptr[pos] == ch)
{
return pos;
}
pos++;
}
return npos;
}
size_t find(const char* str, size_t pos=0)
{
assert(pos < _size);
char* s=strstr(_ptr+pos, str);
if (s)
{
return s - _ptr;
}
return npos;
}
typedef char* iterator;
typedef const char* const_iterator;
iterator begin()//第一个元素的位置
{
return _ptr;
}
iterator end()
{
return _ptr + _size;
}
const_iterator begin() const//第一个元素的位置
{
return _ptr;
}
const_iterator end() const //最后一个元素的下一个位置
{
return _ptr + _size;
}
friend ostream& operator<<(ostream& out, const String& str);
friend istream& operator>>(istream& in, String& str);
}; C++构造函数之委托构造函数
C++ sizeof各种类型的大小
写一个字符串转整数的接口,这个接口是给很多人用的,需要比较健壮,可扩展,负数,大数也得考虑
向一个vector里push 100次,其sizeof()多大
入参用const& str 修饰有什么区别
epoll的水平和边沿触发的区别
shell命令,统计哪个词出现的次数最多
syn攻击造成了什么?
设备崩溃怎么办,怎么查崩溃的原因
会不会用gdb调试call文件,直接跳到某行,看变量的值
读写锁,读锁和写锁 谁会先抢到锁
查看2道真题和解析

