
interview
GoRustNeverStop
这个作者很懒,什么都没留下…
展开
-
KMP算法实现(我的理解实现)
#include <string>#include <iostream>#include <vector>using namespace std;class Solution {public: int kmp(string S, string T) { vector<int> next = cal_next(T); int k...原创 2018-03-31 14:41:00 · 335 阅读 · 0 评论 -
C/C++ 程序内存结构
http://blog.youkuaiyun.com/ufolr/article/details/52833736楔子一个可执行程序文件需要在计算机硬件上运行起来,其实质就是静态的文件被加载到内存中的过程,可执行程序文件只是一个程序的载体。那么执行一个应用后,它在内存中是一个怎样的结构呢,请关注今天的走进科学——《C/C++ 程序内存结构》。动&静一个程序被加载到内转载 2017-12-12 09:46:07 · 825 阅读 · 0 评论 -
golang面试
交替打印数字和字母问题描述使用两个 goroutine 交替打印序列,一个 goroutinue 打印数字, 另外一个goroutine打印字母, 最终效果如下 12AB34CD56EF78GH910IJ 。package mainimport ( "fmt" "sync")func PrintNums(printChar chan int, wg原创 2017-09-08 11:22:37 · 2125 阅读 · 0 评论 -
Golang面试题解析
最近在很多地方看到了golang的面试题,看到了很多人对Golang的面试题心存恐惧,也是为了复习基础,我把解题的过程总结下来。面试题1. 写出下面代码输出内容。package mainimport ( "fmt")func main() { defer_call()}func defer_call() { defer func() {转载 2017-09-13 11:34:11 · 34945 阅读 · 16 评论 -
教你如何迅速秒杀掉:99%的海量数据处理面试题
教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢此文,却无任何收获,那么,我也甘愿背负这样的罪名,:-),同时,此文可以看做是对这篇文章:十道海量数据处理面试题与十个方法大总结的一般抽象性总结。转载 2017-08-09 16:52:43 · 462 阅读 · 0 评论 -
有80个硬币,其中一个是假的比较轻给你个天平你要最少称几次?
4次 具体步骤: 先均分A27 B27 C26 第1次秤AB确定假的所在组(已知是轻的),具体就不写了 第2次分D9 E9 F9或8 再测 第3次分G3 H3 I3或2 再测 第4次取假的那组中的两个来测 快速答案是log以3为底N(本题为80)的对数 本体中约为3.98869得4(不管是多少,只要非整,就要进位取整.如5.00001,则取6.不过这种类型题里应该不会出现类似数字) 举例,总共转载 2016-08-26 15:29:43 · 4259 阅读 · 0 评论 -
C++开发者都应该使用的10个C++11特性
在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备。你也许看到过许多类似介绍各种C++11特性的文章。下面是我总结的,C++开发者都需要学习和使用的C++11新特性。 auto在C++11之前,auto关键字用来指定存储期。在新标准中,它的功能变为类型推断。auto现在成了一个类转载 2016-08-23 00:17:23 · 1011 阅读 · 0 评论 -
C++11新特性参考
C++11新特性参考资料原创 2016-08-23 00:08:36 · 579 阅读 · 0 评论 -
[LeetCode题解]从两个有序数组的并集中寻找第k小元素
Given two sorted arrays A, B of size m and n respectively. Find the k-th smallest element in the union of A and B. You can assume that there are no duplicate elements.不得不承认这道题目解决起来非常的巧妙。像大多数难题一样转载 2016-08-22 23:20:27 · 6257 阅读 · 0 评论 -
Linux下map、hash_map和unordered_map效率比较
原理介绍map介绍Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部转载 2016-08-22 23:12:45 · 2304 阅读 · 0 评论 -
运算符重载(实现CString类)
private: char*m_pdate;public://构造函数CString::CString(){};//拷贝构造CString::CString(const CString& t_cstring){ if(m_pdate!=NULL) delete[]m_pdate;转载 2016-08-22 18:54:08 · 2163 阅读 · 1 评论 -
程序员有趣的面试智力题
转载请标明出处,原文地址:http://blog.youkuaiyun.com/hackbuteer1/article/details/6726419 偶然间在网上看到几个原来没见过的面试智力题,有几个题目在国内流传相当广,什么n个人怎么分饼最公平,屋里的三个灯泡分别由哪个开关控制,三架飞机环游世界,用火柴和两根绳子测量45分钟之类的题目,火星得已经可以考古了,这里就不再说了。转载 2016-08-31 00:26:18 · 758 阅读 · 0 评论 -
查看linux cpu和内存利用率
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。 操作实例: 在命令行转载 2016-08-30 23:46:25 · 14998 阅读 · 0 评论 -
C/C++笔试题(很多)
微软亚洲技术中心的面试题!!!1.进程和线程的差别。线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4转载 2016-08-29 11:47:44 · 76116 阅读 · 0 评论 -
高性能网络编程1----accept建立连接
最近在部门内做了个高性能网络编程的培训,近日整理了下PPT,欲写成一系列文章从应用角度谈谈它。编写服务器时,许多程序员习惯于使用高层次的组件、中间件(例如OO(面向对象)层层封装过的开源组件),相比于服务器的运行效率而言,他们更关注程序开发的效率,追求更快的完成项目功能点、希望应用代码完全不关心通讯细节。他们更喜欢在OO世界里,去实现某个接口、实现这个组件预定义的各种模式、设置组件参数来达转载 2016-08-08 00:08:47 · 984 阅读 · 0 评论 -
哈希表详解
先来看一个TopK题目: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。 假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。 如何解答?Topk之前已经说过,寻找转载 2016-08-08 00:04:11 · 2136 阅读 · 1 评论 -
哈希表总结
哈希表的概念 哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构。它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。散列存储的基本思路 以数据中每个元素的关键字K为自变量,通过散列函数H(k)计算出函数值,以该函数值作为一块转载 2016-08-08 00:03:16 · 509 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2017-12-12 09:48:01 · 338 阅读 · 0 评论 -
TCP(HTTP)长连接和短连接区别和怎样维护长连接
http://blog.youkuaiyun.com/ls5718/article/details/51757467一、HTTP协议和TCP协议HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议。IP协议主要解决网络路由和寻址问题,TCP协议主要解决如何在IP层之上可靠的传递数据包,使在网络上的另一端收到发端发出的转载 2017-12-12 09:49:19 · 1413 阅读 · 0 评论 -
KMP算法最浅显理解——一看就明白
KMP算法最浅显理解——一看就明白说明KMP算法看懂了觉得特别简单,思路很简单,看不懂之前,查各种资料,看的稀里糊涂,即使网上最简单的解释,依然看的稀里糊涂。 我花了半天时间,争取用最短的篇幅大致搞明白这玩意到底是啥。 这里不扯概念,只讲算法过程和代码理解:KMP算法求解什么类型问题字符串匹配。给你两个字符串,寻找其中一个字符串是否包含另一个字符串,如果包含,返回包含的起始位置。 如下面两个字符串...转载 2018-01-25 13:19:18 · 492 阅读 · 1 评论 -
Manacher's Algorithm 马拉车算法
Manacher's Algorithm 马拉车算法这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这是非常了不起的。对于回文串想必大家都不陌生,就是正读反读都一样的字符串,比如 "bob", "level", "noon"转载 2018-01-31 14:17:14 · 547 阅读 · 0 评论 -
排序算法之 归并排序 及其时间复杂度和空间复杂度
排序算法之 归并排序 及其时间复杂度和空间复杂度在排序算法中快速排序的效率是非常高的,但是还有种排序算法的效率可以与之媲美,那就是归并排序;归并排序和快速排序有那么点异曲同工之妙,快速排序:是先把数组粗略的排序成两个子数组,然后递归再粗略分两个子数组,直到子数组里面只有一个元素,那么就自然排好序了,可以总结为先排序再递归;归并排序:先什么都不管,把数组分为两个子数组,一直递归把数组转载 2018-01-02 09:40:09 · 39896 阅读 · 2 评论 -
字符串相关概念
本文简单讲解字符串的相关概念。如:回文、子串、子序列、前缀树、后缀树、后缀数组、匹配、字典序。1.回文所谓回文字符串,就是指一个字符串,从左到右读和从右到左读是完全一样的,比如”xyx”。2.子序列对于一个序列a=a[1],a[2],……a[n]。则非空序列a2=a[p1],a[p2]……a[pm]为a的一个子序列,其中1如:“welcome” 子序转载 2018-01-22 09:03:19 · 447 阅读 · 0 评论 -
多线程编程之自旋锁
一、什么是自旋锁 一直以为自旋锁也是用于多线程互斥的一种锁,原来不是! 自旋锁是专为防止多处理器并发(实现保护共享资源)而引入的一种锁机制。自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请转载 2017-12-28 17:18:25 · 869 阅读 · 0 评论 -
常用排序算法时间复杂度和空间复杂度
摘自维基百科: http://zh.wikipedia.org/wiki/%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95#.E7.A8.B3.E5.AE.9A.E6.80.A7在计算机科学所使用的排序算法通常被分类为:计算的时间复杂度(最差、平均、和最好性能),依据列表(list)的大小(n)。一般而言,好的性能是O(n log n),转载 2017-12-27 14:50:57 · 790 阅读 · 0 评论 -
linux内核调优参考
linux内核调优参考对于新部署的机器,需要做一些基本的调优操作,以更改一些默认配置带来的性能问题1 修改打开文件数 root@mysql:/data/tools/db# vim /etc/security/limits.conf * soft nofile 65535* soft n转载 2017-12-19 09:23:42 · 432 阅读 · 0 评论 -
利用GDB调试多线程core文件
在linux下程序崩溃时,一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的,接下来我们通过一个案例观察怎么利用GDB调试core文件。在命令行中键入 gdb : 进入gdb命令行中: 键入 bt 可以查看程序终止线程的堆栈: 但是有时错误不是发生在这个堆栈上。键入 info threads转载 2017-12-18 20:52:40 · 730 阅读 · 0 评论 -
算法题:最小差
若给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[ i ],数组 B 中取 B[ j ],A[ i ] 和 B[ j ] 两者的差越小越好( | A[ i ] - B[ j ] | ),写一个函数返回最小差。挑战 :时间复杂度 O(n log n)格式:输入行输入两个整数数组 A 和 B,最后输出返回转载 2017-12-27 10:39:58 · 2382 阅读 · 0 评论 -
孤儿进程与僵尸进程[总结]
1、前言 之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考APUE,认真总结一下,加深理解。2、基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的转载 2017-12-14 17:45:00 · 330 阅读 · 0 评论 -
linux僵尸进程产生的原因以及如何避免产生僵尸进程
给进程设置僵尸状态的目的是维护子进程的信息,以便父进程在以后某个时间获取。这些信息包括子进程的进程ID、终止状态以及资源利用信息(CPU时间,内存使用量等等)。如果一个进程终止,而该进程有子进程处于僵尸状态,那么它的所有僵尸子进程的父进程ID将被重置为1(init进程)。继承这些子进程的init进程将清理它们(init进程将wait它们,从而去除僵尸状态)。 但通常情况下,我们是转载 2017-12-14 17:42:56 · 16611 阅读 · 0 评论 -
算法题:尾部的零
设计一个算法,计算出任意一个整数 n 的阶乘中尾部零的个数挑战 :O(logN)的时间复杂度格式:输入行第一行输入一个整数 n,最后输出阶乘尾部零的个数。样例输入11样例输出2转载 2017-12-22 16:32:24 · 333 阅读 · 0 评论 -
gdb调试多线程程序总结
阿里核心系统团队博客http://csrd.aliapp.com/?tag=pstack 多线程调试必杀技 - GDB的non-stop模式Linux下多线程查看工具(pstree、ps、pstack)http://www.cnblogs.com/aixingfou/archive/2011/07/28/2119875.htmlhtt转载 2017-12-22 10:04:04 · 791 阅读 · 0 评论 -
linux本地进程间socket通信是否经过网卡?
转自:https://www.zhihu.com/question/43590414结论:不走网卡,不走物理设备,但是走虚拟设备,loopback device环回.最简单的办法,拔掉网线,自己测试一个本地socket通信传输数据,就OK了。本机的报文的路径是这样的:应用层-> socket接口 -> 传输层(tcp/udp报文) -> 网络层 -> back to转载 2017-12-13 21:01:12 · 3876 阅读 · 3 评论 -
TCP协议中的三次握手和四次挥手(图解)
建立TCP需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示:先来看看如何建立连接的。【更新于2017.01.04 】该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好。这么久才来更新,抱歉!!错误配图如下:首先Client端发送连接请求报文,Server转载 2017-12-12 09:54:50 · 380 阅读 · 0 评论 -
通俗易懂地讲解TCP建立连接的三次握手和释放连接的四次挥手
https://www.cnblogs.com/xiaoming0601/p/6001021.htmlTCP建立连接时,为什么要进行三次挥手? 每一次TCP连接都需要三个阶段:连接建立、数据传送和连接释放。三次握手就发生在连接建立阶段。 在谢希仁著《计算机网络》第四版中讲三次握手的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。在另一部经典的《计算机网转载 2017-12-12 09:51:34 · 621 阅读 · 0 评论 -
Listen第二个参数的意义
Listen第二个参数的意义 今天主要回顾下listen的第二个参数的意义。 话说现在现在都是用框架写业务代码。真的很少在去关注最基本的socket函数的意义了。该忘得都忘得差不多了。~~~ 要慢慢捡起来。 主要是在看redis网络这块的时候它的第二个参数设置的是500多。 而且突然想到当初几年前腾讯电话面试问过我第二个参数是什么意思。当时我一股脑就说成co转载 2016-08-18 11:31:16 · 1330 阅读 · 0 评论 -
后台开发基础
linux和os:*、netstat tcpdump ipcsipcrm 点击打开链接*、cpu内存硬盘等等与系统性能调试相关的命令 点击打开链接*、设置修改权限tcp网络状态查看各进程状态抓包相关等相关命令 tcpdump netstat ps……awk sed需掌握*、共享内存的使用实现原理 点击打开链接 必考必问*转载 2016-08-03 00:17:45 · 8021 阅读 · 1 评论 -
const实现机制
const的实现机制const究竟是如何实现的呢?对于声明为const的内置类型,例如int,short,long等等,编译器会如何实现const的本意?那么对于非内置类型是否也是与内置数据类型一样处理呢,例如对于结构体类型则会怎样处理呢?下面通过几个小例子来说明这些问题:C语言const示例:const int i=10;int *p=(int *)(&i);*p转载 2016-08-02 22:43:27 · 2570 阅读 · 0 评论 -
C++ 虚函数表解析
C++ 虚函数表解析 陈皓http://blog.youkuaiyun.com/haoel 前言 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,R转载 2016-04-12 21:41:04 · 329 阅读 · 0 评论 -
C++中虚函数的作用是什么?它应该怎么用呢?
虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。下面是对C++的虚函数这玩意儿的理解。一, 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始)简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;用形象的语言来解释转载 2016-04-12 21:25:47 · 2473 阅读 · 0 评论