自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Creek Shi

Hew out of the mountain of despair a stone of hope !

  • 博客(265)
  • 资源 (8)
  • 收藏
  • 关注

原创 美之为美golang杂记

2019-09-03 10:59:05 167

原创 twproxy 配置

vi nutcracker_cache_6201.ymlbeta: listen: 0.0.0.0:8102 hash: murmur distribution: ketama auto_eject_hosts: false redis: true preconnect: true servers: - 10.20.49.223:6201:1 se...

2019-04-01 18:13:27 336

原创 redis配置

daemonize yespidfile /home/qqdz/redis/6666/pid/redis_6666.pidport 6666tcp-backlog 511timeout 0tcp-keepalive 0loglevel noticelogfile "log_6666.log"databases 4save 900 1save 300 600save 60 10...

2019-04-01 18:10:00 143

转载 红黑色-跳跃表-有序链表效率对比

原贴: https://github.com/cpp2go/rbtree_skiplist_benchmark go语言实现,红黑树用的nginx源码,跳跃表用的redis实现,map用go原生,sortlist自己实现,二分查找go test -test.bench=.*测试结果: RbTreeSkipListMapSortListNew116 ns/op169 ns/op60.1 ns/op0...

2018-04-04 00:13:28 683

原创 nginx 配置

user  me;worker_processes  4;events {    worker_connections  102400;}http {    include       mime.types;    default_type  application/octet-stream;    #access_log  logs/access.log  main;    keepalive_...

2018-03-19 17:00:15 148

原创 redis 主从配置

主redis配置daemonize yespidfile redis/pid/redis_6103.pidport 6103tcp-backlog 511timeout 0tcp-keepalive 0loglevel noticelogfile "log_6103.log"databases 16#save 900 1#save 300 10#save 60 10000stop-writes-o...

2018-03-19 16:53:25 153

原创 linux 服务器网路内核配置

/etc/sysctl.conf kernel.sysrq = 0kernel.core_uses_pid = 1net.core.wmem_default = 8388608net.core.rmem_default = 8388608net.core.rmem_max = 16777216net.core.wmem_max = 16777216net.core.netdev_max_backl...

2017-12-27 22:57:49 183

原创 关于nginx平滑均匀加权轮询算法的思考

缘起:http://blog.csdn.net/gqtcgq/article/details/52076997关于nginx算法的平滑均匀性的一点分析(只考虑两个的情况,多个的可以类比)。假设a出现的权重为M,b出现的权重为N1均匀性:把算法的操作分成两个,max操作(只有选中的才执行,执行后代价是要被减去total权重(M+N))和add操作(不管怎么选中都会执行)。对于a,

2017-12-14 21:50:24 1274

转载 进程线程以及协程

http://www.godiscoder.com/?p=521进程线程以及协程前段时间在看nodejs,主要是因为nodejs的IO处理性能非常高,号称能够同时支持上万的长连接,这个当时太让我惊讶了,主要是了解其实现原理以及设计思想。要说起这个实现原理,必须要从操作系统中最基本重要的概念——进程来开始逐步了解现代现代才做系统是如何进行程序调度的。进程是操作系统中最重要的一

2016-02-04 10:10:31 621

转载 Linux内核的进程、线程问题

Linux进程、线程问题2010年8月15日,今天研究的是Linux的进程管理,昨天是内存寻址,感慨颇深啊,《深入理解Linux内核》这本书真是浪得虚名,根本没有说到问题的本质,一些概念的由来、定义、区别以及联系,技术的原理,运行过程,整体结构,各部分衔接等等问题统统没有说明白,甚至根本没说,全书都是Linux的数据结构,及各种变量,接口函数,却根本没说是什么,为什么。对于新手来说简直是灾难,

2016-01-21 13:51:22 1881

转载 Golang适合高并发场景的原因分析

http://blog.csdn.net/ghj1976/article/details/27996095典型的两个现实案例:我们先看两个用Go做消息推送的案例实际处理能力。360消息推送的数据:16台机器,标配:24个硬件线程,64GB内存 Linux Kernel 2.6.32 x86_64 单机80万并发连接,load 0.2~0.4,CPU 总使用率 7%~10

2016-01-20 16:16:25 166

转载 linux 二进制 安装mysql 5.5.46

我用的是5.5.46,最后远程访问不了,要在my.cnf里屏蔽 skip-networking就可以了Ref: http://gadelkareem.com/2012/02/27/install-mysql-5-5-21-64-bit-rpm-on-centos-6-2-x86_64/http://forums.cpanel.net/f354/usr-bin-mysqladmin-co

2015-11-30 14:37:19 911

原创 如何将结构体作为字符流处理

1 ,首先声明一个足够大的空间char data[MAX_DATA_]

2014-10-22 20:06:14 863

原创 CallBack机制

struct parentCallBack{virtual bool exec (object *entry)

2014-10-22 18:50:11 625

转载 C++开发者都应该使用的10个C++11特性

C++开发者都应该使用的10个C++11特性 在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备。你也许看到过许多类似介绍各种C++11特性的文章。下面是我总结的,C++开发者都需要学习和使用的C++11新特性。 auto在C++11之前,auto关键字用来指定存

2014-10-09 18:37:48 756

转载 gdb输出stl-终结者

gdb中输出vectorWith GCC 4.1.2, to print the whole of a std::vector called myVector, do the following:print *(myVector._M_impl._M_start)@myVector.size()To print only the first N elements, do:p

2014-09-04 12:15:19 889 1

转载 Makefile与Shell的问题

大概只要知道Makefile的人,都知道Makefile可以调用Shell脚本。但是在实际使用时,并不那么简单,一些模棱两可的地方可能会让你抓狂。你若不信,可以先看几个例子,想象一下这些这些例子会打印什么内容,记下你想象的结果,然后在计算机上运行这些例子,对照看一下。 示例一:if [ "$(BUILD)" = "debug" ]; then  echo

2014-09-01 11:42:23 681

原创 shell脚本 dos格式转unix

#! /bin/shdostype=dosIFS=

2014-08-28 17:48:28 2810

原创 shell脚本 dos文件转unix 类似dos2unix命令

#! /bin/shdostype=dosIFS=$(echo -en "\n\b")function iterate_dir(){for file in $1/*; doif [ -f $file ]; thentypename=`file $file | grep -q CRLF && echo dos || echo unix`if [[ $typename ==

2014-08-28 17:48:25 4909

原创 No module named google.protobuf

01#!/bin/sh 02cd /usr/local/src03tar zxvf protobuf-2.4.1.tar.gz04cd protobuf-2.4.1 05./configure

2014-08-21 18:44:01 12423 2

转载 Linux命令pkg-config

一般来说,如果库的头文件不在 /usr/include 目录中,那么在编译的时候需要用 -I 参数指定其路径。由于同一个库在不同系统上可能位于不同的目录下,用户安装库的时候也可以将库安装在不同的目录下,所以即使使用同一个库,由于库的路径的 不同,造成了用 -I 参数指定的头文件的路径也可能不同,其结果就是造成了编译命令界面的不统一。如果使用 -L 参数,也会造成连接界面的不统一。编译和连接界面不统

2014-08-21 17:39:18 4179

转载 sourceinsight建立linux源码浏览

用Source Insight建立一个Linux内核代码工程具体步骤如下:(一)打开Source Insight,单击【项目】按钮,弹出下拉菜单。(二)单击【新项目】按钮,弹出【新项目】对话框,输入项目名和存放路径,单击【确定】按钮。(三)弹出【添加删除文件】对话框,在内核源代码路径下选择全部 2.6.25内核代码,单击【关闭】按钮。(四)弹出【

2014-08-04 22:55:10 931

原创 LeetCode Word Ladder

终于憋出来了,虽说还不是特别好。没想到一点点的改动竟然是过于不过的差别就是这句:if(temp>1) break;。这题最令我为难的是我不能用unordered_set这个数据结构,原因简单的很,我用的是XP,VS是2008版的,所以操作都是基于vector的,首先就是复制到vector,这题就是找两点之间的最短距离呗,先是试了佛洛依德,后来迪杰斯克拉,后来广度优先,都没通过(要么时间要么空间),

2014-03-21 22:16:05 729

原创 LeetCode Valid Palindrome

这题感觉没什么,就是判断输入是否为数字,字符时比较麻烦,其他没啥。bool isPalindrome(string s) { int lens = s.length(); if(lens==0) return true; int i=0,j=lens-1; while(i<j) { if(s[i]<'0') { i++; continue; } if(

2014-03-16 17:26:04 605

原创 LeetCode Binary Tree Maximum Path Sum

提也不怎么难,马虎了好几次,剑指offer上有类似的找最大和,那题是找叶子节点,这题是任意的节点,反正就是求和,一样的方法。int maxPathSumRecursive(TreeNode *root,int &maxsumtoroot){ if(root==NULL) { maxsumtoroot = INT_MIN; return INT_MIN; } int leftm

2014-03-16 17:00:50 683

原创 LeetCode Best Time to Buy and Sell Stock III

这是好题,所谓的好题就是必须用优化的方法解,否则通不过。只能交易两次股票,本来想到第二题中的方法,找每个最小值最大值的差值,找两个最大的,仔细分析发现,这样的方法是错的,比如5,9,6,12,按上面的方法回提取两个最大差值,5和9,6和12,如果后面还有数,假设还是5,9,6,12,那么最大的利润值应该是两次5和12,也就是说不能选择每临近的最大值最小值的差值。接下来想到了二分法,从某一点划分开,

2014-03-16 15:23:37 712

原创 LeetCode Best Time to Buy and Sell Stock II

屡明白就行了,就是找小的,然后找大的,没找到这样一个组合就进行一次交易,把利润加到结果里,继续找。假设小数是5大数是9,对于之间出现的按序的数比如6,7,8不影响结果,因此直接略过,但对于不安续出现的比如5,8,7,9这样的话因为可以进行两次交易,这样利润会更大。int maxProfit(vector &prices) { if(prices.size()==0||prices.size(

2014-03-14 19:50:03 622

原创 LeetCode Best Time to Buy and Sell Stock

就是找后面的数减去前面的数的最大差值,做过。int maxProfit(vector &prices) { if(prices.size()==0||prices.size()==1) return 0; int maxdiff=0; int minvalue = prices[0]; for (int i=1;i<prices.size();i++) { if (price

2014-03-14 19:14:25 659

原创 LeetCode Triangle

题目得说明路径不能跨越,否则的话,每层找最小的就可以了。为什么多提交两次呢?dp[j] = (dp[j]>dp[j+1]?dp[j+1]:dp[j]) + triangle[i][j];要是条件表达式不加括号的话不可以,那样的话后面的加法就没加上。还有一点就是j从小到大遍历,否则的话会覆盖结果,正常人都会从小到大。// LeetCode_Triangle.cpp : 定义控制台应用程序的入口点

2014-03-14 18:51:46 555

原创 LeetCode Pascal's Triangle II

不让用开辟空间的话不知道怎么做,要是让开辟空间,真没什么,但是容易马虎,所有parr[j] = parr[j] + parr[j-1];用一维数组解决时都应j从大到小,否则的话会覆盖原来的值。vector getRow(int rowIndex) { vector ret; if(rowIndex<0) return ret; int *parr = new int[rowIndex

2014-03-13 22:09:48 548

原创 LeetCode Pascal's Triangle

见过无数次了,终于写了一次,一个数组都没用。vector > generate(int numRows) { vector oneresult; vector > ret; if(numRows==0) return ret; oneresult.push_back(1); ret.push_back(oneresult); oneresult.clear(); int le

2014-03-13 21:46:27 494

原创 LeetCode Populating Next Right Pointers in Each Node II

有意思,看了题意,我只想说一句:上一题的方法依然好使,我只把64改成640就提交通过了。我却迷惑了,任意的二叉树640层完全不够用呀,1000层,10000层也有可能呀,难道还有什么更好的方法吗?TreeLinkNode* layers[640];void preOrderLayer(TreeLinkNode *root,int layer)//,TreeLinkNode *&layers

2014-03-13 20:59:31 551

原创 LeetCode Populating Next Right Pointers in Each Node

这题很有新意,刚开始想到后序遍历,可是对于给的例子5和6之间怎么连接呢?无论怎么遍历5和6之间都隔好几个数,递归引用传参数的方法肯定不行,题中又说常量的空间,对于完全二叉树最多也不过64层吧,所以每一层设定一个指针用于建立连接。传递指针数组不太容易,用了全局变量解决。如下:// LeetCode_PopulatingNextRightPointers.cpp : 定义控制台应用程序的入口点。

2014-03-13 20:53:38 556

原创 LeetCode Distinct Subsequences

这题有有意思,比前面的题好多了,刚开始时理解题意有误,就是没明白什么意思,看了别人的博客才明白。之后就是方法的问题,递归,动态规划,然后是动态规划的优化,不优化的动态规划不通过。所谓的优化,其实就是用一维数组代替DP的二维数组,dp式子dp[i][j]=dp[i-1][j-1]+dp[i-1][j](S[i]==T[j])时;dp[i][j]=dp[i-1][j](S[i]!=T[j])时;只要是

2014-03-13 20:14:19 557

原创 LeetCode Flatten Binary Tree to Linked List

这题还算有点意思,有意思的地方就是虽说是按先序遍历的方式连接的,却不能按先序的方式遍历(这样的话递归时会改变树的结构,导致找不到后面的节点),于是按照先序相反的方式遍历(注意,这可不是后序遍历),程序是写出来了,问什么多提交了几次,我理解成的双向链表了,结果居然提示时间超时,看看别人的程序才知道自己错哪了。void flattenRecursive(TreeNode *root,TreeNod

2014-03-11 21:24:49 558

原创 LeetCode Path Sum II

没什么新意,就是在遍历到叶子节点的时候把一个结果存入结果集中,注意恢复临时结果。void pathSumRecursive(TreeNode *root,int sum,vector &oneresult,vector > &ret){ if (root->left==NULL&&root->right!=NULL) { oneresult.push_back(root->val);

2014-03-11 19:39:47 603

原创 LeetCode Path Sum

做这题感觉像大妈在菜市场买菜唠唠叨叨,没什么技术含量,感觉有点烦。bool hasPathSum(TreeNode *root, int sum) { if(root==NULL) return false; if (root->left==NULL&&root->right!=NULL) { return hasPathSum(root->right,sum - root->v

2014-03-11 19:26:44 473

原创 LeetCode Minimum Depth of Binary Tree

没什么难度的,刚开始又马虎了。。。int minDepth(TreeNode *root) { if(root==NULL) return 0; if (root->left==NULL&&root->right!=NULL) { return minDepth(root->right)+1; } else { if (root->left!=NULL&&root->r

2014-03-11 19:08:40 491

原创 LeetCode Balanced Binary Tree

剑指offer上的题目,马虎了多提交了两次。bool isBalancedRecursive(TreeNode *root,int &lenth){ if(root==NULL) { lenth = 0; return true; } int leftlenth,rightlenth; if (isBalancedRecursive(root->left,leftlenth

2014-03-11 18:54:45 564

原创 LeetCode Convert Sorted List to Binary Search Tree

这题刚开始的做法是把链表中的元素放到数组,然后按照上一题的做法,结果出现内存不够用而通不过,再想想,和上题相似,对链表递归操作,每次找到中间位置就行了,只不过时间复杂度增加了点,但对于链表这不可避免的。如下:TreeNode *resusiveListToBST(ListNode *head,int num) { if(head==NULL||num<=0) return NULL;

2014-03-10 22:10:27 493

程序员面试题精选100题.doc

程序员面试题精选100题(全).doc 网上大多数版本不全只有20多道,这个版本有60道题,也不是最全的。有最全的还希望拿出来分享一下。大部分题我都自己实现过,放在了博客上,欢迎一起讨论学习!

2013-01-11

google_c++编程风格指南

Google 的项目大多使用 C++开収。每一个 C++程序员也都知道,C++具有徆多强大的诧言特性,但返 种强大丌可避免的导致它的复杂,而复杂性会使得代码更容易出现 bug、难亍阅诺和维护。 本挃南的目的是通过详绅阐述如何迕行 C++编码来觃避其复杂性,使得代码在有效使用 C++诧言特性的 同时迓易亍管理。 使代码易亍管理的方法乊一是增强代码一致性,让别人可以诺懂你的代码是徆重要的,保持统一编程风格 意味着可以轱松根据“模式匹配”觃则推断各种符号的吨义。创建通用的、必需的习惯用诧和模式可以使 代码更加容易理解,在某些情冴下改发一些编程风格可能会是好的选择,但我们迓是应该遵循一致性原则, 尽量丌返样去做。 本挃南的另一个观点是 C++特性的臃肿。C++是一门包吨大量高级特性的巨型诧言,某些情冴下,我们会 限制甚至禁止使用某些特性使代码简化,避免可能导致的各种问题,挃南中列丼了返类特性,幵解释说为 什么返些特性是被限制使用的。

2012-12-06

C语言内存分配详解

1、C中内存分为四个区 栈:用来存放函数的形参和函数内的局部变量。由编译器分配空间,在函数执行完后由编译器自动释放。 堆:用来存放由动态分配函数(如malloc)分配的空间。是由程序员自己手动分配的,并且必须由程序员使用free释放。如果忘记用free释放,会导致所分配的空间一直占着不放,导致内存泄露。 全局区:用来存放全局变量和静态变量。存在于程序的整个运行期间,是由编译器分配和释放的。 文字常量区:例如char *c = “123456”;则”123456”为文字常量,存放于文字常量区。也由编译器控制分配和释放。 程序代码区:用来存放程序的二进制代码。

2012-12-04

自动发送接受邮件程序

自动发送 自动接收 经过一个月测试,采用18个邮箱,不会被判垃圾邮件

2012-09-06

改进的归并排序算法

改进的归并排序算法,两种方式 1 是不回写, 2是 非递归

2012-09-06

最小生成树的c实现

最小生成树的c实现最小生成树的c实现最小生成树的c实现最小生成树的c实现最小生成树的c实现

2011-11-16

各种排序算法的c实现

各种排序算法各种排序算法各种排序算法各种排序算法各种排序算法各种排序算法各种排序算法

2011-11-16

红黑树算法的c实现

红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树红黑树

2011-11-16

空空如也

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

TA关注的人

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