<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Adenson的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Adenson</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Adenson]]></copyright><item><title><![CDATA[设计模式1]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/139757793</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/139757793</guid><author>Adenson</author><pubDate>Tue, 18 Jun 2024 01:10:46 +0800</pubDate><description><![CDATA[1、面向对象三大特性：封装、继承、多态。3、面向对象的SOLID五大原则。]]></description><category></category></item><item><title><![CDATA[Docker介绍]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/134242486</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/134242486</guid><author>Adenson</author><pubDate>Mon, 06 Nov 2023 12:34:36 +0800</pubDate><description><![CDATA[Docker入门级介绍+部分Docker进阶]]></description><category></category></item><item><title><![CDATA[位图&&布隆过滤器]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/107068819</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/107068819</guid><author>Adenson</author><pubDate>Sat, 24 Oct 2020 10:47:27 +0800</pubDate><description><![CDATA[位图
位图其实也就是哈希的思想，就是用每一位来存放某种状态，通常是用来判断某个数据存不存在的。数据是否在给定的整形数据中，结果是在或者不在，刚好是两种状态，那么可以使用一个二进制比 特位来代表数据是否存在的信息，如果二进制比特位为1，代表存在，为0代表不存在。
位图的模拟实现
class BitSet
{
public:
	BitSet(const size_t&amp; bitCount)
		:_bitCount(bitCount)
	{
		_bit.resize((bitCount &gt;&gt;]]></description><category></category></item><item><title><![CDATA[格林深瞳一面、二面、hr]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/108747819</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/108747819</guid><author>Adenson</author><pubDate>Wed, 23 Sep 2020 13:45:49 +0800</pubDate><description><![CDATA[一面（1h3min）

自我介绍
面试官问我是想按照实习标准还是校招的标准来面试？（？？？我不是投递的是校招吗？）你想按照校招的标准也可以，那你如果面试通过可以提前来实习吗？
看了你的博客，既然是你写的那你应该比较熟悉，我就从里面找一些相关的问一下吧。
你哈希写的挺多，应该比较熟悉，那我就问一下哈希相关的。
在你的概念中，你是怎样理解哈希的呢？
面试官给我讲了一下他对哈希的理解。
哈希算法有什么限制吗？
哈希冲突是啥？那你是如何进行解决的呢？
一次/二次探测中的 i 具体是个什么呢？i 每次都会递增是吗？i]]></description><category></category></item><item><title><![CDATA[字节跳动后端开发一面、二面、三面]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/108744449</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/108744449</guid><author>Adenson</author><pubDate>Wed, 23 Sep 2020 02:02:16 +0800</pubDate><description><![CDATA[一面（大概50min,忘记录音了）

基础知识有点多记得不太清楚了。
介绍一下你的第一个内存池项目。
面试官说他也知道这个内存池，这块儿谈的比较久。
项目是自己完成的吗？为什么要做这个项目？
这个内存池为什么比 malloc 快？malloc底层原理了解吗?
算法题：实现一个链表的插入排序。
最后夸了一下我写的博客，然后反问（大概就是这些了，记不太清楚了，顺便蹭个访问量：https://blog.youkuaiyun.com/Adenson 手动微笑）

二面（47min）

让我对自己的一面进行一个评价。
你比较熟悉]]></description><category></category></item><item><title><![CDATA[快手C++开发工程师-网络SDK（一面凉经）]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/108706991</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/108706991</guid><author>Adenson</author><pubDate>Mon, 21 Sep 2020 12:34:28 +0800</pubDate><description><![CDATA[快手一面(44min)

自我介绍
算法①：实现一个链表的插入函数
算法②：字符串的局部逆置
算法③：实现一个最大栈，时间复杂度要求O(1)
算法④：
有大量key-value的数据，key是一个整数区间，value是一个列表。不同的key之间存在交集。输入一个整数，要求输出所有的value。例如：
Key       value
[1,9]  -&gt; {V1,V2,V3}
[1,20]  -&gt; {V4}
[6,15]  -&gt; {V5}
[13,19]  -&gt; {V6,V7}
输入2，]]></description><category></category></item><item><title><![CDATA[百度技术中台质量部_测试开发（三面+hr）]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/108695735</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/108695735</guid><author>Adenson</author><pubDate>Mon, 21 Sep 2020 01:16:43 +0800</pubDate><description><![CDATA[百度一面（1h8min）

自我介绍
询问学历，年龄，熟悉的语言？
项目是用什么语言写的？了解python吗？是否有考研的打算？
c语言和c++都是如何进行内存申请的，realloc/calloc了解吗？
了解内存泄漏吗，简单说一下？预防/检测？
普通程序如果我们malloc/new以后不free/delete的话会发生什么，会产生内存泄漏吗?
既然进程结束后操作系统会自动释放new出来的内存，那么为什么还要有delete呢？
面试官给我讲了好久关于内存方面的知识，受益匪浅。
了解数组指针和指针数组吗？
简]]></description><category></category></item><item><title><![CDATA[美团基础研发部门一面、二面、三面]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/108543223</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/108543223</guid><author>Adenson</author><pubDate>Sat, 12 Sep 2020 01:06:43 +0800</pubDate><description><![CDATA[一面 1h37min

自我介绍。
面试官自我介绍，介绍部门，询问手握offer情况。
开局两个算法题。（40min中过去了）
list适用于什么场景，是否支持随机访问。
介绍一下 deque，以及deque适用于什么场景。
详细说一下map底层数据结构，map遍历是有序的吗?采用的是哪种遍历方式？
所以下C++中的四种 cast 转换，详细的说一下。
new失败的时候会干吗？抛出什么异常？malloc失败会发生什么？
如何实现一个不能被继承的类？
C++11的智能指针有了解吗？
git如何回滚一个comm]]></description><category></category></item><item><title><![CDATA[智能指针]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/105869673</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/105869673</guid><author>Adenson</author><pubDate>Mon, 27 Jul 2020 21:28:32 +0800</pubDate><description><![CDATA[在谈及智能指针指针之前，我先来介绍一下 RAII 这个技术：RAII（Resource Acquisition Is Initialization）是一种利用对象生命周期来控制程序资源的简单技术。在对象构造时获取对象资源，接着控制对资源的访问使之在对象的生命周期内始终保持有效，最后在对象析构的时候释放资源。这样子做实际上把管理一份资源的责任托管给了一个对象。这种做法有两大好处：

不需要显式地释放...]]></description><category></category></item><item><title><![CDATA[网络通信协议]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/104997634</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/104997634</guid><author>Adenson</author><pubDate>Tue, 14 Jul 2020 09:32:04 +0800</pubDate><description><![CDATA[应用层协议
负责应用程序之间的数据沟通（应用层的协议是程序员自己定义的）
自定制协议
举例网络版计算器：客户端将两个数字和一个运算符传输给服务端，然后服务端进行计算，最后将结果返回给客户端。 （这个属于数据结构化传输：使用结构体将多个数据对象的数据在内存中进行组织，最终进行数据传输）

在数据结构化传输中有两个专业名词：
序列化：将数据对象按照指定协议组织成为可持久化存储/数据传输的二进制数据串。...]]></description><category></category></item><item><title><![CDATA[设计特殊类、单例模式（懒汉模式，饿汉模式）]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/105891899</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/105891899</guid><author>Adenson</author><pubDate>Sat, 04 Jul 2020 22:01:15 +0800</pubDate><description><![CDATA[1、设计一个类，只能在堆上创建对象
实现方式：


将类的构造函数私有，拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。


提供一个静态的成员函数，在该静态成员函数中完成堆对象的创建。
class HeapOnly
{
public:
	static HeapOnly* GetInstance()
	{
		HeapOnly* p = new HeapOnly;
		return p;
	}...]]></description><category></category></item><item><title><![CDATA[unordered_map/unorderd_set使用与哈希介绍]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/107057076</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/107057076</guid><author>Adenson</author><pubDate>Wed, 01 Jul 2020 14:15:23 +0800</pubDate><description><![CDATA[在C++98中，STL提供了底层为红黑树结构的一系列关联式容器，在查询时效率可达到 O(logN)，即最差情况下 需要比较红黑树的高度次，当树中的节点非常多时，查询效率也不理想。最好的查询是，进行很少的比较次 数就能够将元素找到，因此在C++11中，STL又提供了4个unordered系列的关联式容器。
unordered_map/unordered_set/unordered_multimap/unordered_multiset
这四个容器与关联式容器（map、set、multimap、multiset]]></description><category></category></item><item><title><![CDATA[网络编程]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/106453150</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/106453150</guid><author>Adenson</author><pubDate>Sun, 31 May 2020 17:07:40 +0800</pubDate><description><![CDATA[UDP网络编程

1、创建套接字 socket 文件描述符（客户端、服务器）

int  socket(int domain,int type,int protocol);


2、绑定地址信息（客户端、服务器）
PS：客户端一般不推荐用户手动绑定地址信息，如果未绑定而是在发送数据（send/sendto）的时候检测到socket还没有绑定地址信息，这时候操作系统会选择一个合适的地址端口进行绑定

int bind(int sockfd,const struct sockaddr* addr,socklen]]></description><category></category></item><item><title><![CDATA[ThreadPool]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/106413375</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/106413375</guid><author>Adenson</author><pubDate>Thu, 28 May 2020 21:28:03 +0800</pubDate><description><![CDATA[为什么要有线程池呢？

因为在完成用户发起的一个请求任务后，这个任务从发起请求到结束任务都会经历一个过程：
若大量的任务处理总耗时 t 中线程的创建 t1 与线程的销毁 t2 占用了大量的比例，就意味着资源、性能的浪费。在大量请求的峰值压力下，若每个请求都创建一个线程，则有可能导致资源耗尽，程序崩溃。所以才会有线程池的出现来解决这个问题。

线程池的应用场景？


任务量大，并且完成任务的时间比较短。（也就是 t2 &lt; t1 + t3）
WEB服务器完成网页请求这样的任务，使用线 程池技术是非常合适的]]></description><category></category></item><item><title><![CDATA[C++11(右值引用、移动构造、移动赋值、lambda表达式）]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/105846844</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/105846844</guid><author>Adenson</author><pubDate>Thu, 30 Apr 2020 16:38:07 +0800</pubDate><description><![CDATA[1、列表初始化（了解其用法）
2、范围for循环
3、final 与 override

final:定义最终类或修饰虚函数，是该类和虚函数不能被继承
override：检查派生类虚函数是否重写了基类某个虚函数，如果没有重写编译报错。
注意区分：如果基类定义纯虚函数，则子类必须重写纯虚函数。

4 、新增加容器—静态数组array、forward_list（单链表）以及unordered_xx系列...]]></description><category></category></item><item><title><![CDATA[模板(非类型模板参数、模板特化、模板分离编译)]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/105684335</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/105684335</guid><author>Adenson</author><pubDate>Wed, 22 Apr 2020 18:04:32 +0800</pubDate><description><![CDATA[模板参数

类型模板参数：出现在模板参数列表中，跟在class或者typename之类的参数类型名称。
非类型模板参数：就是用一个常量作为类(函数)模板的一个参数，在类(函数)模板中可将该参数当成常量来使用 比如用非类型模板参数定义一个静态数组
 template&lt;class T, size_t N = 10&gt;

注意：

浮点数、类对象以及字符串是不允许作为非类型模板参数的。
非类型...]]></description><category></category></item><item><title><![CDATA[TCP三次握手、四次挥手详细解析]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/105261468</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/105261468</guid><author>Adenson</author><pubDate>Thu, 02 Apr 2020 08:40:29 +0800</pubDate><description><![CDATA[TCP建立连接（三次握手）
开始的时候客户端和服务器都是处于CLOSED。主动打开连接的是客户端，被动打开连接的是服务端。

TCP服务器进程先创建传输控制块TCB，时刻准备接受客户进程的链接请求，此时服务器就进入了LISTEN（监听）状态。
TCP客户进程也先创建传输控制块TCB，然后向服务器发出连接请求，请求报文中SYN=1，同时选择一个初始序列号 seq=x ，此时TCP客户端进程进入了S...]]></description><category></category></item><item><title><![CDATA[生产者消费者模型、读者写者模型]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/104827652</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/104827652</guid><author>Adenson</author><pubDate>Mon, 16 Mar 2020 20:11:58 +0800</pubDate><description><![CDATA[生产者与消费者模型
什么是生产者消费者模型

某个模块负责产生数据，这些数据由另一个模块来负责处理，产生数据的模块，形象地称为生产者，而处理数据的模块，就称为消费者，该模式还需有一个缓冲区处于生产者和消费者之间，作为一个中介，生产者把数据放入缓冲区，而消费者从缓冲区取出数据。


为什么要使用生产者消费者模型

生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之...]]></description><category></category></item><item><title><![CDATA[线程（线程控制、线程安全（同步与互斥实现）、单例模式）]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/104750106</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/104750106</guid><author>Adenson</author><pubDate>Sat, 14 Mar 2020 17:45:26 +0800</pubDate><description><![CDATA[线程介绍
线程的概念

linux 下的线程是一个轻量级进程，是通过进程pcb描述实现的，并且同一个线程组（进程）中的线程共用同一个虚拟地址空间，所以 linux 下的传统pcb更加轻量化，因此叫做轻量级进程。
线程是CPU调度的基本单位，进程是系统资源分配的基本单位。进程是一个线程组。

线程的优缺点

...]]></description><category></category></item><item><title><![CDATA[进程间通信（管道、共享内存、消息队列、信号量）]]></title><link>https://blog.youkuaiyun.com/Adenson/article/details/104683175</link><guid>https://blog.youkuaiyun.com/Adenson/article/details/104683175</guid><author>Adenson</author><pubDate>Fri, 06 Mar 2020 20:50:02 +0800</pubDate><description><![CDATA[进程间通信
Linux环境下，进程地址空间相互独立，每个进程各自有不同的用户地址空间。任何一个进程的全局变量在另一个进程中都看不到，所以进程和进程之间不能相互访问，要交换数据必须通过内核，在内核中开辟一块缓冲区，进程1把数据从用户空间考到内核缓存区，进程2再内核缓存区把数据读走，内核提供这种机制称为进程间通信。通信方式有：管道、共享内存、消息对列、信号量等
管道


什么是管道呢？
我们把从一个进...]]></description><category></category></item></channel></rss>