- 博客(373)
- 资源 (11)
- 问答 (1)
- 收藏
- 关注

原创 2020阿里社招面试心得(成功拿到offer)
先自我介绍一下,本人来自西安的一所211计算机高校。17年研究生毕业,先面试了阿里,四面然后挂了,具体参考: https://blog.csdn.net/dlf123321/article/details/52659174后面面试腾讯,三面,过了。具体参考https://blog.csdn.net/dlf123321/article/details/52659174 。之后两年半就一直在腾讯做分布...
2020-03-13 19:18:49
16966
6

原创 2017京东校招面试回忆(已成功拿到offer)
1面 24日 晚上5:30-6:401 先说自己熟悉的领域2 list的实现有什么? arraylist1.6 1.7区别 底层 linkedlist 底层是怎么实现的 单向还是双向 lru缓存 如果按位置索引,那个快?3 hash的实现 是否是线程安全的 写一个不安全的实现 哪里不安全 hashmap的不安全在于扩容的时候 参见:http://b
2016-09-26 23:02:18
13508
4

原创 2017腾讯校招面试回忆(成功拿到offer)
我本来报的岗位是企业事业群,后来把我分配到了技术工程群三面是9月23日,到现在,最后的结果还没出来,我也不知道是过了还是挂了,先写出来,希望对明年找工作的朋友们一点帮助一面 21号 大概1小时 面试半小时 聊天半小时 1 二叉树的查找 我大笔一挥,在纸上写下了下面的的代码 public static TreeNode find(TreeNode tree,
2016-09-26 15:18:22
20090
原创 关于使用netserver 进行网络速度的测试
1 在server A上启动 netserver 这个程序;端口,就随便写一个不用的值,这里就暂时用88882 在server B上去进行测试,假定server A的ip是192.168.1.1053 在server A上查看网络流量,就可以看到192.168.1.105绑定的网卡上有流量,另外这个流量的计算单位是KB/s,或者MB/s。记得是大B。4 测试完成关闭server A上面的netserver然后 kill5 测试完成关闭server B上面的netperf。
2025-06-22 19:25:30
243
原创 关于sst的统计信息
不是,使用的是 FdWithKeyRange(就是上面的VersionStorageInfo里面的level_files_brief_)即使我们配置单个sst的大小是64MB,L1L2及更下层次的sst最大大小确实是64MB,但是L0层的sst并不受这个限制。下一个问题,在compact进行选择文件的时候,使用的是FileMetaData么?VersionStorageInfo里面的files_的语意说的很清楚了。Version 记录的某个时刻全局所有sst的信息。记录在sst内部的属性信息。
2025-06-17 11:05:32
294
原创 char* Slice的引用拷贝管理
因为org的清理,只是说让org内部不在指向0x4070a3 ,但是0x4070a3的数据(abc)依然没有被覆盖,而且another依然指向0x4070a3。data_ 本身是一个字符指针,指向0x40709a ,这个位置存放的数据是“abcx\0”data_ 本身是一个字符指针,指向0x40709f,这个位置存放的数据是“defx\0”org和another指向同一个位置,那为什么清理了org,another依然可以读到呢?因为slice_list里面的每个元素的data都指向temp2。
2025-06-09 14:32:16
277
原创 RocksksDB写流程
batch里面有个字符串叫rsp_,里面放的就是每次操作的元数据,rsp_ 的格式如下|8个字节的sequence|4个字节count|serialized-kv-1|serialized-kv-2|serialized-kv的结构就是|1个字符的KTypeValue|4个字节key_size|key_bytes|4个字节value_length|value_bytes|所谓的KtypeValue就是表明这次操作是写还是删除。
2025-06-05 15:24:53
791
原创 谈谈iostat
这个简单的可以理解为快递员要给一个18层的公司所有员工送快递,每一层都有一些包裹,对于快递员来说,最好的办法是同一楼层相近的位置的包裹一起投递,否则如果不采用这种算法,采用最原始的来一个送一个(即noop算法),那么这个快递员,可能先送了一个包括到18层,又不得不跑到2层送另一个包裹,然后有不得不跑到16层送第三个包裹,然后包到1层送第三个包裹,那么快递员的轨迹是杂乱无章的,也是非常低效的。aqu-sz: 发出到设备的请求的平均队列长度。w_await 向设备发出的写请求被处理的平均时间(以毫秒为单位)。
2025-05-28 22:02:49
305
原创 关于甲骨文(oracle cloud)丢失MFA的解决方案
前两年,申请了一个招商的多币种信用卡,然后就从网上撸了一个oracle的免费1h1g的服务器。用了一段时间,人家要启用MFA验证。啥叫MFA验证,类似与短信验证吧,就是绑定一个手机,然后下载一个app,每次登录的时候除了你设置的用户名密码外,还需要那个特定手机上展示的一个code。就这么简单。但是,不出意外的话,有意外了,手机换了,当时忘记更新那个app了。然后 就没法登录oracle了。
2025-05-10 17:05:52
746
原创 c++ stl的插入获取与删除
emplace_front 和push_front 的区别在于,emplace_front可以直接构造数据放到list最前面,不用再次拷贝。vector在头部增加元素或者删除元素 时间复杂度都是O(n)emplace_back和push_back类似。
2025-04-21 10:36:12
321
原创 关于LRU与LFU
第一个unordered_map key是真实的key,value是一个node,包含了真实的value和它使用的频率。简单地说,就是移除那些最长没有被使用的数据。当容量满的时候,直接从第三个unordered_map 里面找最小的key,然后清理对应的value即可。第一个unordered_map key是真实的key,value是真实的value。第二个unordered_map key是真实的key,value 是它的使用次数。这里麻烦的要记录每个key的使用频率,然后找到最小的那个频率。
2025-04-10 14:48:18
416
原创 c++ vector指针的传递
当vector里面是指针,且整个vector作为参数传递给某个方法的时候。大家看上面的输出,比对一下 就能看出来很多问题。在linux下运行代码,上面两个地址是一样的;在windows下运行,上面两个地址不一样。
2025-03-18 22:04:15
255
原创 c++基础概念
Person里面有个方法叫add,参数是Person *p,那么对p的所有修改,会影响真实的外部调用 这叫使用指针做函数参数。假定有个person类,里面有name和age,有个print方法会打印出name和age。但是你在方法内部修改ptr的指向,那原来myptr的位置 依然没有变呀。上面我们说了如果使用一个指针作为函数的参数,那么内部的修改会影响外部。假如在方法里修改了ptr的内容,那么是会影响到外面的myptr。至此以后,p2就是p1,p1就是p2。如上的代码,运行一次大家就能看到引用的意思了。
2025-03-16 00:36:41
93
原创 谈谈Libaio
但是 我找了半天 都没有一个能运行的例子。一段代码不能运行和shi有什么区别?下面的例子是直接把一个person list写入裸盘,再读出来进行校验的例子。网络上有一堆 aio的例子和说明。
2025-02-17 17:03:26
181
原创 线程池判断当前任务组是否都已经结束
最近写测试代码的时候,需要判断提交的线程池里面的任务是否都已经全部执行完成。在网上找到了一圈,发现这篇博客写到算是比较完整的。但是还是有几个问题。
2024-12-08 20:43:47
165
原创 rocksdb merge的简单记录
rocksdb的merge主要是为了解决读&写需要两步的操作。例如定义一个累加器,总得先把之前的值读出来才能加。下面给两个例子,大家可以直接用。
2024-10-10 17:56:14
373
原创 谈谈Rocksdb的手动Compact
它默认是true,也就是说,如果我现在手动进行了一次compact,那么在我手动的compact执行完成之前,系统不会再进行内部的compact。也就是说即使L0的sst都满了,也不会把L0的sst往下刷,直到手动compact完成。执行上面的逻辑后,系统就会把L4之前在key1和key100范围内的sst都一层一层合并,最终保证在key1和key100范围内的sst都处于L4层。我已经没想明白为什么要这样,手动compact本身就是个低级别的事情,为什么要阻碍系统内部的compact呢?
2024-09-13 15:16:06
503
原创 Rocksdb一些日志
表示:37号 job 需要从L3读1个文件,然后L4读23个文件,一共需要读取1512930764 字节的数据进行合并。而且通过table_file_creation 也可以看到新生成的sst里面kv总数是多少,墓碑是多少。会答应出每隔10分钟各个列簇compation的信息,具体包括。结果里ingest就是写入的数据总量。
2024-08-30 15:36:38
457
原创 谈谈CosBench
我一直认为,任何一个组件的开发者在编写user guide的时候都应该秉持这样一个思路:最快的,最方便的先让用户能把这个组件跑起来。各种优化细节应该后面再说,而不是一上来就给用户说一大堆琐碎的知识点。
2024-08-23 11:47:28
949
原创 谈谈Rocksdb的del优化--CompactOnDeletionCollector
在GetIntTblPropCollectorFactory函数里面,会把我们设定的factory包装成一个个UserKeyTablePropertiesCollectorFactory,然后放到ColumnFamilyData的int_tbl_prop_collector_factories_里。核心逻辑就是把sliding_window_size分成128个小段,当处理了sliding_window_size个key之后,128段也走完了,就把第1段的数据抛弃掉,接着处理第129段数据。
2024-08-15 09:30:28
1081
原创 rocksdb的缓存在读流程里面的作用
我认为理解一个东西最好的逻辑,就是先假定它不存在,然后看看在没有它的情况整个流程如何运行,然后再去看看加上它都解决了那些问题。Version::Get里面会按照L0的sst文件都检查一遍,然后之后的每层只用检查1个sst文件的逻辑进行搜索。具体对某个sst文件的查询在Version::Get里面的TableCache::Get方法里。在BlockBasedTable::Open里面,就是按照如下的顺序解析各个block的。这里面大的流程就是先从mem读,如果没有就去imm读,如果还没有就去sst里面读。
2024-08-01 12:02:03
682
原创 Cmake静态库与动态库的构建与使用
但是ForHello_local_share 还动态依赖原来的库,你把目录名称改了,ForHello_local_share 想要去找hello_share这个动态库自然找不到了。ForHello_local_static 已经把库加到自己里面了,外面的库有什么变化,对ForHello_local_static 本身已经没有影响了。之后 我们可以看到两个可执行文件:ForHello_local_static 和ForHello_local_share。假定库不是我们的项目产生的,而是别人给的呢?
2024-07-04 00:22:18
489
原创 谈谈BlueStore的BitmapAllocator
一次allocate的单元就是alloc_unit,咱们就按64KB计算。如果L2的槽位是上0xffffffffffffffff,就说明整个槽位都还没有分配过任何空间,完全是空闲的,把free_pos设为0,然后去L1查找。一个L1的children,管理L0里8个slot,L0里1个slot管理64个children,也就是说L1的一个children对应L0。一个L2的children,管理L1里8个slot,L1层1个slot管理32个children,也就是说L2的一个children对应L1。
2024-05-27 18:20:37
1070
原创 谈谈std::map的lower_bound
我们知道std::map内部是一个红黑树,放到std::map里的数据等有一个能比较大小的方法。它相当于java里面的TreeMap。它里面有个lower_bound方法,返回一个迭代器,它指向map里第一个大于等于参数的元素。方法的签名很简单,但是在不同情况下,它的返回值还是有些麻烦的,这里记录一下。分别指明下面几种case。
2024-05-14 10:08:09
761
原创 关于In template: no matching constructor for initialization of
n),而没有默认构造函数(即没有不带参数的构造函数),当std::map试图为键20默认构造一个Extent对象作为占位符时,就会找不到合适的构造函数来匹配,从而引发“no。Extent>,即键是int类型,值是Extent类型的对象。int>),插入操作不涉及复杂的对象构造,因为其值类型是基本类型int,可以直接进行复制赋值,所以不会遇到构造函数匹配的问题。赋值或插入:接着,如果找到了键20,则直接对该键对应的值进行赋值;在您提供的代码中,map3是一个std::map<int,基础不牢,地动山摇!
2024-05-13 21:33:53
816
原创 Clion attach一个linux进程进行debug
remote 我不知道是什么意思,就写的是我之前在192.167.155.45 的linux上编译出calculateSum时的地址。在远程linux上,直接运行程序calculateSum,然后另起一个ssh连接 ps -ef|grep calculateSum,拿到它的进程号,假定是130225。手头的一段程序,目前已经在linux上运行了,我在windows上有源代码,想在本地debug一下,看看代码里复杂的流程都是怎么样运行的。以上面的文件为例,编译出来的二进制程序就叫calculateSum。
2024-03-11 11:30:24
808
原创 rocksdb里面key,seq的相关分析
然后kv对会进入WriteBatchInternal。假定我们的调用是Put(“mykey”,“myValue”)。这里面的key就是我们原生的用户理解的key。我们一般是从这个方法把kv对写入db的。
2024-02-29 20:47:50
139
原创 关于Failed to start LSB
在/etc/sysconfig/network-scripts里面找到ifcfg_eth0.4095,重命名。在/var/log/message里面发现了 了如下错误。发现机子不能ping通自己,然后就。也不知道这个4095是干啥的。
2024-02-29 14:46:06
470
原创 关于memtable的生命周期与flush流程
既然谈到什么周期,那我们得明确,MemTable至少有下面几个变化点:1 刚启动的时候或者说启动恢复的时候,从无到有。2 Memtable变成Immemtable的时候。3 Immemtable下刷到磁盘变成sst的时候。
2024-02-28 09:57:28
957
4
原创 RocksDB的关键参数与优化方案
默认情况下max_total_wal_size是0,系统会使用多个columnFamily的write_buffer_size* max_write_buffer_number的积相加。控制并发度: 当增大 min_write_buffer_number_to_merge 的值时,系统会允许更多的MemTable转换为Immutable MemTable而不立即进行Flush操作,这意味着可以在内存中累积更多的数据,提高并发写入性能,尤其是在高吞吐量场景下。单个memtable的最大大小,默认64MB。
2024-02-27 10:59:33
1424
1
fusioncharts/widgets for flex 的swf 与swc文件
2012-11-28
springmvc 异常处理示例
2016-02-27
用java发送邮件
2014-09-09
Collections.sort的源码问题
2015-03-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人