自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

原创 限制长度双向链表的插入操作

面试遇到的问题,一开始面试官是问我有什么方案可以实现排行榜,当时给出了两个方案。后面面试官又在我的其中一种方案上让我手写代码实现排序双线链表的插入,根据score值插入,并且链表长度限制在100。 需要考虑的点:1)插入在链表表头的;2)插入到链表表尾;3)插入到链表中间;4)需要在遍历整个链表的时候统计链表的长度;5)如果长度刚好在100而插入刚好在末尾,则此时不需要执行插入操...

2019-10-16 02:59:26 416

原创 Effective STL:杂记(一)

1. 避免使用vector<bool> vector<bool>实际上并不能算是一个STL容器,实际上也并不存储bool。因为一个对象要成为STL容器,就必须满足C++标准的第23.1节列出的所有条件,其中一个条件是,如果 c 是包含对象T的容器,而且 c 支持operator[],则必须能够编译下面代码:T *p = &c[0]; 也就是...

2019-10-13 18:47:54 241

原创 T t与T t = T()的区别

主要的区别就是默认构造函数对内置类型的初始化上。如果没有T中没有定义构造函数,则对于“T t”,并不会对 t 中内置类型设置初始值,是一个随机值。但对于“T t = T()”,对 t 中内置类型会设置初始值,如 int 类型会设置为0。而对于自定义类型,不管哪种方式,都会调用构造函数初始化。#include <iostream>using namespace std;...

2019-10-12 16:30:52 485 1

原创 删除链表倒数第k个节点

在面试的时候遇到的手写代码题目,删除倒数第k个节点,需要先处理链表长度小于k、倒数第k个节点刚好是第1个节点、链表为空、k值小于等于0的情况。然后方法的话是先用找到第k个节点的方法找到倒数第k-1个节点,这样子删除这个节点的下一个节点就可以了。 实际上只需要实现remove_n函数,这里的代码增加了对链表的初始化、内存释放以及打印函数,让结果可以直观的看出来,代码也能够直接运行。...

2019-10-12 10:01:50 678

原创 面试:杂记(三)

1. SO_REUSEPORT和SO_REUSEADDR SO_REUSEADDR用于绑定不同的本地地址和相同的端口到套接字上。也就是说设置了SO_REUSEADDR之后,不同的进程可以通过不同的本地地址,创建同一个端口的套接字。 SO_REUSEPORT则是可以多个进程bind到相同的IP和端口。相对与SO_REUSEADDR,它能让IP地址也是一样的。这样子每个进程就可...

2019-10-09 10:47:03 160

原创 面试:杂记(二)

前段时间面试了某大厂游戏部门,这里记录下其中的两个问题。1. 在中国,MTU设置为多少合适? 遇到这个问题的时候是懵逼的,就知道MTU最大为1500。后面和同事探讨了下,才知道国际通用576,因为目前最老的路由器超过576就会分包,而我们公司UDP包内容限定为480应该就是这个考量。对于TCP分包并没有影响,因为TCP协议会自己整合在一起,但是如果UDP报文如果分包了,就应用...

2019-10-08 20:22:29 134

原创 More Effective C++:自增与自减操作符的重载

在C++中,自增与自减均有前缀形式与后缀形式。int i = 0;++i; // 自增前缀形式i++; // 自增后缀形式--i; // 自减前缀形式i--; // 自减后缀形式 总所周知,前缀与后缀的区别就是前缀是直接操作后再返回,而后缀则是先用临时对象保存旧值,增加旧值后再返回之前的临时对象。即有:i = 0...

2019-10-08 19:43:37 140

原创 Effective C++:初始化列表

C++中初始化成员变量有两种方式:一种是在构造函数体内对成员变量初始化;另一种则是初始化列表方式,就是跟在构造函数后面用于初始化指定成员变量的列表。两种初始化方式如下:class Test {public: // 初始化列表初始化_mem成员变量 Test(int mem) : _mem(mem) {} // 一般的构造函数 Test(int me...

2019-10-06 22:03:22 202

原创 More Effective C++:隐式类型转换与explicit关键字

1. 隐式类型转换 C++编译器能在两种数据类型之间进行隐式转换(implicit conversion),它从C语言继承过来的转换方法,例如char隐式转换为int和short转换为double之类的,对于用户自定义类型,则可以自己提供函数让编译器进行隐式类型转换。 通过单参数构造函数(single-argument constructors)和隐式类型转换运算符两种方式,我...

2019-10-06 18:28:34 248

原创 Effective C++:虚函数参数默认值

在C++中,对象分为静态类型(static type)和动态类型(dynamic type)。静态类型就是在程序中被声明时所采用的类型;而动态类型则是指“目前所指对象的类型”,它可以表现出一个对象将会有什么行为。class Shape {public: virtual display(int i = 4) { std::cout << "in S...

2019-10-05 23:12:21 194

原创 字节对齐相关

C/C++都是按照最大对齐补齐方式的,即按照占空间最大成员来处理对齐,对齐是由于计算机系统的限制导致的。因为许多计算机系统对基本数据类型的合法地址做出了一些限制,要求某种类型对象的地址必须是某个值K(通常是2、4或8)的倍数。这种对齐限制简化了形成处理和内存系统之间接口的硬件设计。 对齐限制可以提高读写内存的效率。例如对double类型数据,有了对齐限制,就可以用一个内存操作...

2019-09-08 23:01:36 128

原创 《编码》之定点数与浮点数

《编码》真是一本不错的书,从灯泡通信、继电器、二进制层层深入,再到加法器、汇编、处理器。全部连了起来,精妙啊,可惜现在才看到这本书,不过也为时不玩。 23章中讲到了定点数与浮点数,所以这里做下记录吧。1.定点数 所谓的定点数,就是只小数点的位置总是在数的某个特定的位置,也就是有效位数是固定的。像书中所举的用压缩BCD(用四个位来表示0~9)保存数值就是只留两位小...

2019-09-08 20:15:41 740

原创 《现代操作系统》第三章:存储管理

操作系统中管理分层存储器体系的部分称为存储器管理(memory manager)3.1 无存储器抽象直接使用物理地址;并行问题;重定位问题(因为使用的是绝对物理地址);装载器需要一定的方法来辨别地址和常数(地址值需要重定位,而常数不需要重定位)。3.2 一种存储抽象:地址空间要保证多个应用程序同时处于内存中并且不互相影响,需要解决的问题:保护和重定位。 保护:给内存块标记保...

2019-08-05 17:28:21 521

原创 MySQL:MySQL server has gone away解决

我出现这个报错,是在C++项目中用Mysql的库函数mysql_real_query往数据库中插入数据的时候出现的,插入的数据有7M、8M。通过网上搜索这个错误,了解到是因为我们写入的数据太大了,在使用msyql导入大文件sql的时候也可能会出现这个错误的。这个问题是max_allowed_packet配置的默认值太小了,该项的作用是限制mysql服务器端接收到的包的大小,所以我们发送的值...

2019-07-31 14:51:40 1031

原创 python:filecmp模块的cmp函数

项目中有个需求,就是对比多个玩家客户端上报的log内容,找到第一次出现不同的行数,并返回出现不同的玩家信息,代码使用python实现的。很久之前就已经实现了,就是先用filecmp模块的cmp函数逐个对比两个文件,如果出现不同了再逐行对比找到不同的一行。但最近重新看了代码,发现还有更好的办法,就是逐行对比,找到不同的一行或者比完为止。但是具体采用哪种方法呢,这让我有点疑惑,因为一般来说有...

2019-07-23 19:20:45 2800

原创 ssh下用sz和rz从服务器上传和下载文件

最近才了解到有一个这么方便的东西。首先需要安装lrzsz包(Centos下):sudo yum install lrzsz 然后就可以上传文件到服务器:rz 直接使用该命令,就会弹出窗口让你选择需要上传的文件了。 从服务器中下载文件:sz filename 直接使用该命令,就会弹出窗口让你选择需要保存该文件的目录了。 ...

2019-07-22 17:53:49 1070

原创 C++:map、hash_map、unordered_map

面试经常被问的问题之一,便是map和hash_map的区别,以及什么时候用map什么时候用hash_map。另外也了解到还有C++11的unordered_map,所以这里一并介绍三个了。用法就不介绍了,主要介绍区别。1. 三者的区别 map底层是用红黑树实现的,空间复杂度为O(n),是随着节点的增加才增加,而查找的时间时间复杂度则固定是O(log(n))了。因为红黑树本来...

2019-07-10 20:39:12 6061

原创 C++:const_cast

const_cast是一个运算符,和dynamic_cast、static_cast、reinterpret_cast一样都是用于类型的转换的,本来想将这四个一起写的,但是查了const_cast相关的资料,发现const_cast可以牵扯到的也不少,所以单独用一篇博客说明了。1. 用法 const_cast的作用很简单,就是去除或增加类型中的const属性或volatil...

2019-07-09 20:41:48 1090 1

原创 面试:杂记(一)

这里主要记录一些面试中被问过的问题。1. realloc、malloc、calloc的区别 工作用的主要是C++,所以只是对malloc了解一些。 1) void *malloc ( size_t size ) 最常用的一个了,就是申请size个字节大小的空间了,这里不会对分配空间进行初始化操作。 2) void *calloc ( si...

2019-07-08 17:34:39 208

原创 基础:Linux硬件配置信息查看

之前面试的时候问到用户量,然后扯到了服务器的配置相关,但服务器是都是由组长申请的,所以当时并不了解。回来后,了解了Linux下硬件信息配置的查看,记录如下。1. CPU信息 CPU信息有三种方式查看。 一种是直接cat /proc/cpuinfo,会打印出所有CPU的详细信息,单个CPU的信息如下:[user@VM_0_4_centos deb...

2019-07-03 16:59:20 933

原创 leetcode:33 搜索旋转排序数组

假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。 你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。 可以用二分法查找,...

2019-07-02 22:38:29 89

原创 基础:大小端字节序

在几乎所有机器上,多字节对象都被存储为连续的字节序列,对象的地址为所使用字节中最小的地址。例如,假设一个类型为int的变量x地址为0x100,也就是说地址表达式&x的值为0x100。那么,x的4个字节将被存储在存储器的0x100、0x101、0x102和0x103的位置。 那么,如果这个变量的值为0x01234567的话,是0x01被保存在0x100,还是0...

2019-07-02 01:01:46 771

原创 leetcode:53 最大子序和

给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:连续子数组[4,-1,2,1] 的和最大,为6。这里用的是O(n)的解法,思路很简单,在计算连续子数组的和的时候,如果发现和变成小于0了,则更新从下一个数开始计算总和就行了,因为当你遇到一个负数导致...

2019-07-01 21:12:34 90

原创 工作记录:coredump相关设置

1. 设置生成coredump文件及大小限制 默认情况下,进程挂了是不会生产coredump文件的,有两种方法可以在进程挂了的时候生成coredump文件。使用ulimit命令,ulimit -c filesize可以指定生成的coredump文件大小上限为filesize,或者使用ulimit -c unlimited不限制coredump文件的大小,但是这种方法只是临时的,重...

2019-06-28 20:14:17 505

原创 工作记录:使用shell脚本进行 open-falcon agent的部署

这次部署之间,已经在两台机器上部署了过open-falcon了,所以transfer已经存在。所以这次部署,主要是在新增的十几台服务器上部署agent即可。 部署的shell脚本如下:#!/bin/bash#scp_agent.shopath="~/open-falcon"servfile="servers.json"passwd=""use...

2019-06-28 15:46:56 513

原创 leetcode:3 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 就是找字符串中连续且字符不重复的子串,注意不是子序列,而是字串。例如“abcdafg”的结果为4,“aaaa”的结果为1。 一开始看到这个题目,想到了KMP算法中求取next数组的过程,但KMP中是用到最长前缀后缀的,并不能直接套用。这道题的思路的话,就是遍历一遍字符串,记录每个字符最新的位置pos...

2019-06-27 00:19:16 201

原创 leetcode:142 环形链表 II

给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 说明:不允许修改给定的链表。 链接:环形链表 II 可以用两种方法: ...

2019-06-25 19:30:17 141

原创 leetcode:89 格雷编码

格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。 一些例子如下(题目中有讲到两种编码格式,这里只例举其中一种):n=0 n=1 n=2 n=30 - 0 0 - 0 00 ...

2019-06-24 17:53:21 113

原创 工作记录:记一次远程部署运行环境

最近项目迎来第一次封测,弄了十几台云服务器用来部署服务器。所有服务器运行环境需要配置的软件等基本都是一样的,所以直接就想到用shell脚本来搞了,折腾了一下,总算是搞定了,虽然脚本是写得比较low。 整个部署分为两个部分,一个是为服务器创建新的账号(默认只有root账号)并进行硬盘挂载,而另一个则是进行相关软件的安装等。因为这第二个部分是在第二天才完成的,所以才分开的。1. ...

2019-06-24 12:20:57 220

原创 工作记录:nginx与apache配置

项目热更新功能,客户端开放员要向服务器上传热更新文件。一开始是通过html页面进行文件上传保存到对应目录下,但是由于用他们觉得用html上传太慢了,所以调整了apache账号的设置,并对html上传文件的目录映射到/usr/share/httpd/下。这样子开发员上传文件可以用ssh,而客户端拉取更新文件的方式及链接格式也不用改变了。1. apache账号相关 由于搭...

2019-06-24 11:17:09 372

原创 面试:atoi函数

处理好正负值边界的问题即可。#include <stdio.h>#include <stdlib.h>#include <string.h>#include <limits.h>#include <assert.h>int myatoi(char *str){ int ret = 0, cur;...

2019-06-15 21:14:59 167

原创 面试:字符串相关(四)

这里是面试常见的字符串相关题目。 主要是字符串实现数字的加法,由于C中不支持String,这里用C++实现了。十进制与二进制就处理进位存在差异,其他都是一样的。1. 十进制加法#include <iostream>#include <string>using namespace std;string addnum(string ...

2019-06-08 13:41:39 108

原创 面试:字符串相关(三)

这里是面试常见的字符串相关题目。 主要是字符串的移动与翻转。1. 实现字符串的左移与右移 这里是将左移转换成为了镜像操作。左移实际上是将左边movenum个字符挪到右边,而对整个字符串进行镜像就可以实现了。但是这个时候,挪过去的movenum个字符以及右边剩余的字符与原来的字符顺序是相反的,所以需要再对这两串字符进行镜像操作,使其顺序恢复正常。 ...

2019-06-08 13:23:22 129

原创 面试:字符串相关(二)

这里是面试常见的字符串相关题目。1. 删除字符串的空格,并返回空格的个数。 不断将后面非空格的字符拷贝到前面即可,这样子只需要遍历一次即可,返回值按照实际题目要求调整。#include <stdio.h>#include <string.h>int delwhitespace(char *str){ char *tmp...

2019-06-06 15:31:24 168

原创 面试:字符串相关(一)

这里是面试常见的字符串相关题目。 该文章主要将strcpy、memcpy、memmove三个。1. strcpy strcpy的返回值是目的字符串的地址,可以实现链式语法。#include <stdio.h>#include <string.h>char *mystrcpy(char *dst, char *s...

2019-06-06 15:19:56 118

原创 C++11 之 std::function、std::bind、std::placeholders

在公司说的项目代码中看到了std::function、std::bind、std::placeholders三个C++11的特性,通过了解之后,发现还是挺有用的,在这里记录下吧。似乎这三个特性一般都是一起使用的,所以也一起讲了。 三个特性都在functional文件中定义,故使用时需要“#include<functional>”1.基础介绍 这里...

2019-06-03 22:48:45 5111 3

原创 Protobuf 编码及序列化的记录

工作中用到了protobuf,然后之前在面试的时候面试官就问了一个问题,如果将int32类型的字段的值设置为0,那还会将该值进行序列化吗?当时是懵了的,因为自己还没有研究这部分。当时给的结果是不会,猜测protobuf中int32的默认值是0,既然默认值是0的,那应该就不会进行序列化了。 那次面试之后就觉得自己应该了解一下这部分了,结果这两天了解完之后,发现自己猜错了。好记...

2019-06-02 18:40:16 7031 1

原创 STL各容器底层数据结构总结

看了《STL源码剖析》,对于里面的容器,下面进行了简单的总结。1.vector: 底层使用数组保存。push_back时若已经满了,则会2*n扩展空间,若实际元素数量低于分配空间的1/4,则会将空间回收为原来的一半。《STL源码剖析》里面没有讲到空间的回收,是之前查找资料时看到。调整空间时,是先申请新的空间,然后将旧空间的内容拷贝过去,然后再释放旧的空间。 只适用于快...

2019-05-28 19:38:39 526

原创 STL中的Traits技法记录

看过《STL源码剖析》的人,一定会知道里面讲到的Traits编程技法。刚开始看到书上这部分的介绍的时候,是有点不太理解这个技法的作用的,但是经过网上找资料了解之后,并且反复看了书上的内容之后,才渐渐了解到这个技法的重要性,对于迭代器及泛型思维的重要性。一句话简述这个技法的主要作用,就是:可以通过迭代器的某个操作,直接获取迭代器里面保存的容器的元素类型。如果没有Traits技法,是无法实现这个操...

2019-05-27 23:20:02 356

原创 Redis内存信息查看相关

info命令可以查看Redis的很多信息如CPU、Memory、Clients的信息,显示内容如下:# Serverredis_version:4.0.8redis_git_sha1:00000000redis_git_dirty:0redis_build_id:fac27060400e1468redis_mode:standaloneos:Linux 3.10.0-514.el7...

2019-05-16 14:57:56 2142

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除