- 博客(41)
- 资源 (6)
- 收藏
- 关注
原创 如何健壮后端服务
对每一个程序员而言,故障都是悬在头上的达摩克利斯之剑,都唯恐避之不及,如何避免故障是每一个程序员都在苦苦追寻希望解决的问题。对于这一问题,大家都可以从需求分析、架构设计 、代码编写、测试、code review、上线、线上服务运维等各个视角给出自己的答案。本人结合自己两年有限的互联网后端工作经验,从某几个视角谈谈自己对这一问题的理解,不足之处,望大家多多指出。 我们大部分服务都是如下的结构,既要...
2018-07-02 14:31:02
287
原创 细说多线程
JAVA线程java线程实现方式实现runnable接口(无结果返回)实现callable接口 (可以通过Future获取返回执行结果)直接继承Thread类(为一个实现runnable接口类的实例) Java 创建线程代价关于时间,创建线程使用是直接向系统申请资源的,这里调用系统函数进行分配资源的话耗时不好说。对操作系统来说,创建一个线
2018-01-04 20:41:27
330
原创 JVM内存管理
JVM内存管理内存结构JVM是按照运行时数据的存储结构来划分内存结构的,JVM在运行java程序时,将它们划分成几种不同格式的数据,分别存储在不同的区域,这些数据统一称为运行时数据。运行时数据包括Java程序本身的数据信息和JVM运行Java需要的额外数据信息。在java虚拟机规范中,将java运行时数据划分为五种,分别为程序计数器java虚拟机栈本地方法栈堆方法区程序计数器 程序计数
2016-03-14 21:20:04
601
原创 初始分库--分表
Auther—Motata分库/分表从表由于一直对mysql数据库不是很了解,而这些是必备的基础知识,所以就花了时间从理论上对分库/分表做了些研究希望到使用时不至于太匆忙。可能以下有些地方表述不当,个人理解有些误区或者有错误,请大家指正,大家讨论,共同成长。大家正常研究问题的路径是,:what(什么)-?why(为什么)-?how(怎么做),接下来,本文将就这三个问题展开讨论和研究:what: 什
2016-02-26 20:36:09
694
原创 字符串分割到二维字符数组中:
/* *字符串分割,把一个长的字符串(可能有空格),分割到一个二维字符数组中。 *并且输出 * *时间复杂度O(N) *注意在操作二维字符串数组时:使用“数组指针”操作能方便 int(*p)[LEN]; * */#include#include#include#include#define NDEBUG#include#define STR_SI
2014-09-06 14:37:46
1631
原创 寻找数组N中最大(最小的)M个数(亲自调试可运行)
当N很小十可以使用方法2,当N很大时可以使用方法1,从硬盘逐次读入解决;/*方法 1 适合大量数据 *寻找长为N的数组的前M大的元素并输出。 *用堆的性质,使用数组N建立一个M大的最大堆,然后输出堆内容即可 *时间复杂度分析: 建堆时间O(M) *遍历数字,并在堆中比较时间O((N-M)logM) *总时间复杂度O(M)+ O((N-M)logM) *
2014-09-06 09:59:30
1828
原创 二维数组环形打印,亲自调试
/*先把数据按照打印格式打印到二维数组中,然后输出二维数组即可 *时间复杂度 O(N*M) *空间复杂度O(N*M)*/#include#include#includeint input(void);void contral(int **arry,int col,int row);void set_value(int**a,int col,int ro
2014-09-04 08:18:29
2742
原创 使用 & ^ << 等 位符实现加法运算
学习过C语言的同学都知道,再写代码的时候,位操作运算总比算数运算操作快, 本文就是用C语言提供的位运算实现两个数的加法。本文使用的代码都经过调试正常并且能够运行,调试环境centos gcc 一下是实现代码,以及测试结果:#include#includeint main(int argc, char **argv){ int add_a,add_b;
2014-06-27 14:44:15
858
原创 数组溢界地址的正确使用: 即 int a[6] 中的 a[-1] 和 a[6] 正确使用
数组溢界地址的正确使用: 即 int a[6] 中的 a[-1] 和 a[6] 正确使用
2014-06-24 10:04:25
1555
1
转载 stl容器区别: vector list deque set map及底层实现
在STL中基本容器有: vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问 set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典 ,把一个值映射成另一个值,如果想创建字典的话使用它好了底层采用的是树型结构,多数使用平衡二叉树实现 ,查找某一值是常数时间,遍历
2014-06-23 16:22:26
819
转载 glibc 内存池管理 ptmalloc(转)
ptmallocphenix* 2006-06-07目录 1 前言 2 x86平台Linux程序的内存分布 3 Allocator 4 chuck的组织 4.1 chuck 4.2 chunk中的空间复用 5 空闲 chunk 容器 5.1 Bins
2014-06-06 08:43:17
1786
原创 读stdlib.h 库qsort源码 ,对上篇文章(回调函数)排序进行修改:
今天无意间看见stdlib.h库 文件中的qsort() 函数的源码,颇有感触,并且觉得自己在上篇博客写的代码虽然还可以,但在看了源码后,觉得自己还是有些思想上的问题。故 写这篇文章给自己纠正。上篇中的sort()函数原型: void sort(const void *,const int number,unsigned width,int(*compare)(void
2014-06-03 17:05:49
1751
原创 使用函数指针,完成一个sort()函数,能对任何类型的数组元素进行排序: 回调函数 以及 memcpy ()原型实现
进来复习了一下C语言指针,一直没有写过太多关于函数指针的代码,而且对回调函数的理解一直都是在理论上,基本上没有太写过关于它的代码,进来得空,写了一个小程序加深下自己对回调函数和函数指针的理解。问题描述: 编写一个sort()函数,使它能够对任何类型的数组元素进行排序。下面是我写的代码:/* 使用函数指针的回调函数技巧,设计一个能排序int 和char 数组的sort()函
2014-05-30 14:27:38
5626
转载 虚函数 inline函数
一、首先回顾下什么是虚函数及其作用,以便更好理解什么函数不能声明或定义为虚函数:1. 定义:虚函数必须是基类的非静态成员函数,其访问权限可以是protected或public,在基类的类定义中定义虚函数的一般形式: virtual 函数返回值类型 虚函数名(形参表) { 函数体 }2. 作用:虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合
2014-05-20 15:40:45
1290
转载 C++ static、const和static const 以及它们的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。 在C++中,sta
2014-04-07 09:37:26
857
1
原创 读 《跟随大数据去旅行》 ......
听罗胖有一期逻辑思维节目讲到大数据。感觉自己对大数据这个概念理解错误,所以决定去借本书了解下大数据的信息。发现一本《跟随大数据去旅行》感觉不错, 正在阅读.......
2014-04-02 09:18:42
745
原创 itoa 库函数的实现
昨天写了一个atoi的库函数实现,感觉不错。今天接着写了一个itoa的库函数实现,鼓励自己加把劲,每天都有收获。希望您提出宝贵意见,大家一起成长。
2014-03-26 09:51:51
1648
原创 实现 atoi库函数
一直在看到说很多人面试被问到atoi的库函数的实现;今天自己也写一个大家一起看看有啥问题,欢迎您提出宝贵的意见,大家相互成长。
2014-03-25 20:09:10
1174
原创 深究指针与引用的差别
由指针定义知,是指向内存中某个存储体对象的变量。它可以指向简单变量, 数组,结构体等,甚至函数 (函数指针)。个人在此有一个疑问,既然指针是指向存储体的变量,而函数没有存储性质,那函数指针如何实现的?我是从这感觉函数没有存储性质:class A{ int i; int fun(int );};大家都知道这个类内存中sizeof(A)= 4; 即它的内存完全是分配给(int)变量的。所以它的成员函数(int fun(int))没有存储性质。所以就不明白函数指针的实现?
2014-03-19 19:41:51
882
原创 出现次数最多的数
题目是这样的:下面是我自己给出的代码#include#includeusing namespace std;int main(void){ int I_num; int I_tem; map M_find; cout<<"input the number:"; cin>>I_num; for(int i=0;i<I_num;i++) {
2014-03-19 14:46:04
962
原创 CentOS 6.5 修改yum源
在安装完CentOS后一般需要修改yum源,才能够在安装更新rpm包时获得比较理想的速度。国内比较快的有163源、sohu源。这里以163源为例子。1, cd /etc/yum.repos.d2. mv CentOS-Base.repo CentOS-Base.repo.backup3. wget http://mirrors.163.com/.help/CentOS6-B
2014-03-08 15:07:43
6945
原创 百度 腾讯 等名企多线程面试题目
第一题:线程的基本概念、线程的基本状态及状态之间的关系?线程,有时称为轻量级进程,是CPU使用的基本单元;它由线程ID、程序计数器、寄存器集合和堆栈组成。它与属于同一进程的其他线程共享其代码段、数据段和其他操作系统资源(如打开文件和信号)。线程有四种状态:新生状态、可运行状态、被阻塞状态、死亡状态。状态之间的转换如下图所示: 第二题:线程与进程的区别?
2014-03-06 20:06:59
1601
原创 C++中:类数据成员的内存布局
首先我们从一个有趣的问题引入: class A { };当我们运行 :cout为啥会是这样呢?其实在《深度探索C++对象模型》一本书中,有详细的解读,我在这只想说说自己的理解:首先class A 是一个类型,是用来实例化对象的,所以它就必须有具体的空间,使系统能按照它的格式分配内存。如果 A a; 当然sizeof(a)的结果也是1。这个是因为它是以一个对象存在的,我们必
2014-03-06 18:20:16
871
转载 C语言 struct大小、首地址与内存对齐
被问到如下问题:给定一个结构体中某个变量地址,可否得到结构体变量的地址?答案是可以,但是对不同的场合有不同的结果;这与微处理器平台、编译器的处理不可分割。首先,对于处理器,大尾端、小尾端的因素必须考虑;其次:一、 ANSI C标准中并没有规定,相邻声明的变量在内存中一定要相邻。为了程序的高效性,内存对齐问题由编译器自行灵活处理,这样导致相邻的变量之间
2014-03-06 16:49:56
2378
转载 分析 C++中的强制类型转化
C++中有4种强制转换:const_cast,static_cast, dynamic_cast, reinterpret_cast,以下将分别介绍: 1. const_cast:形式const_cast(expression),用来修改类型的const或volatile属性,除了const或volatile修饰以外,type与expression类型一样;它主要用
2014-03-06 16:07:54
640
转载 堆和栈的区别
来源:http://blog.csdn.net/hairetz/article/details/4141043一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) —
2014-03-03 14:58:12
594
原创 求两个数的平均数
前些天看见一个求两个数的平均数的题目,由于以前一直做嵌入式小系统,对这种奇技淫巧还是比较喜欢的,尤其是当在一些硬件受限的系统上写代码时,会有意想不到的效果。是这样 : int temp_a , temp_b , mid ; mid = (temp_a & temp_b) + (( temp_a ^ temp_b )>>1);这个表达式 的正确性
2014-03-03 14:49:24
1332
转载 typedef 和 #define 的区别
一直想动手写关于typedef 和# define的区别,偶然的机会发现这篇博文,觉得写得很好。把自己想要表达的都说的很清楚所以就转载了。感谢dfcao 来自博客园的兄弟。typedef 和#define 都常用来定义一个标识符及关键字的别名,但他们之间有关键的区别。typedef 是语言编译过程的一部分;#define是宏定义语句,它本身并不在编译过程中进
2014-03-03 14:18:16
789
原创 C90为C语言增加了void : void 表示什么?
关键字 void是在C90新增加的。它的用法涉及几个方面:在函数原型中,函数原型为编译器提供依据检查函数的参数是否合乎要求。但由于大量的k&R c 中,是这样声明函数的: double fun ();C90中,为了能够确切的检测函数参数,明确指出应该使用 double fun(void);但又考虑到对以前版本的兼容,所以在,C90的版本中,遇到double fun ();会自动避
2014-02-28 15:36:58
1234
原创 C语言学习笔记(4)类型转化,复合类型
c语言里的简单类型只有两类,整数型 和浮点型:整数型: char 1 short 2 int 4 long 4浮点型 :float 4 double
2014-02-27 13:17:42
1249
转载 C语言学习笔记(3)assert的使用
assert宏的原型定义在中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:#inclu
2014-02-26 14:16:53
726
原创 C语言学习笔记(2) 浅析static变量
像大家知道的一样,static是静态变量,别static修饰的变量都会被编译器放到(.data)数据段。当时有两种情况大家需要分清楚:1:static修饰一个全局变量。 全局变量本来就是放在(.data)数据段,它存在的意义就在于可以被多个函数访问,而这些函数村早与不同的C代码中。但正是因为这个,他给我们会带来一些麻烦。由于C语言只有一个全局空间,于是很容易发生命名冲突。试想一个项目
2014-02-26 14:11:19
714
转载 学习编程的,基础题目。
1.C语言中,修饰符volatile的含义是什么?举例说明其使用场合。 答.volatile提醒编译起它后面所定义的变量随时都有可能发生改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变化由别的程序更新了的话,将会出现不一致现象。 一般
2014-02-25 19:30:28
707
原创 C语言学习笔记(1)
extern的用法:(声明变量 / 函数) extern可以用来修饰变量,也可以用来修饰函数(不过放到函数前面基本没有意义) 例如: int t; // 定义一个变量,并在内存分配四字节(32位系统) extern int t; //声明一个变量,但是没有分配内存C语言中对于变量的声明与定于的一般规则: 1:头文件中,对于
2014-02-25 15:10:10
913
原创 一个让我爱上数学的证明题
记得是2008年,那年上大一,机缘巧合的选修了一门数值分析的选修课。老师在第一节课时给我们这个证明题:特别喜欢。也正是由此开始了一段我的数学建模学习和比赛。再次感谢这位老师,他也成为我比赛时的指导老师;谢谢您。题目: 四条腿长短相同的椅子,一定可以在起伏不平的地面上放稳! 题目大家可能觉得很老套,接触过数学建模的同学可能都见过,而且估计很快也能写出证明过程。但是证明过程不
2014-02-25 13:43:36
1539
5
转载 一致性哈希(最喜欢的算法之一)
个人觉得是一篇很好的博文,所以擅自存入自己博文中,还请见谅。tencent2012笔试题附加题 问题描述: 例如手机朋友网有n个服务器,为了方便用户的访问会在服务器上缓存数据,因此用户每次访问的时候最好能保持同一台服务器。已 有的做法是根据ServerIPIndex[QQNUM%n]得到请求的服务器,这种方法很方便将用户分到不同的服务器上去。但是如果一台服务器死掉了, 那么n
2014-02-25 13:08:00
1047
BCH(31,16,3)编码,纠正三个错误
2013-06-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人