自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 编译链接的时候静态库顺序导致符号未定义问题详解

前情概要接入新库的时候遇到符号位定义问题。有人跟我说改一下库的顺序,就能解决问题。我试了下,嗯,问题是解决了。但是我总觉得库之间不应该有依赖关系,毕竟链接库就是个找符号的问题,如果有依赖,那a,b两个库,相互依赖,顺序怎么整呢?大型的软件,岂不是加一个库就要弄死人?带着这个疑问我做了一些小实验,来看一下一下库位置的顺序到底是如何影响符号未定义问题的。问题根源之所以链接顺序改变可以解决符...

2019-08-15 19:38:02 4047

原创 java字符串编码转换过程中发生了啥?

背景:有一个db链接,使用了latin1编码。有一个latin1的表,里面要存储UTF8或者GBK的中文。然后在java代码层,为了把正确编码的中文落库,使用了网上流传着的这么一段编码转换的代码public static String encodeLantin1(String s) { try { return new String(s.getBytes(...

2019-07-29 23:11:48 314

原创 一个TCP/IP包出现两个IP地址——IPv4-in-IPv4

今天在处理问题的时候,抓了一个包,发现里面的IP层很奇怪,有两层。但是wireshark完美解析了这个包。这让我很疑惑,为什么一个包会有两个IPv4地址呢?按道理来说IP包后面就是数据段了,两个IP包不会有问题吗?但是隐约又觉得是ok的,因为隐约记得IP层可以指定下一个头的协议,但是是不是能指定两个IP呢?这让我很疑惑。于是我重新查了一下IP的头定义。Protocol字段IP报文头...

2019-06-04 19:22:50 4885 2

翻译 RocksDB调优指南

本文原味来自rocksdb的英文wiki。翻译后放在了我的repo中rocksdb-doc-cn,此处只做简单转发,并且原文没有做任何校对,欢迎提修改意见。希望能帮助到有需要的朋友下面是正文

2019-04-22 18:53:15 10542

原创 gcc expected initializer before ‘class’

今天写代码的时候遇到了这个错误,想跟大家分享下。这是一个神奇的编译错误。报错的地方打开可能完全看不到哪里有问题,甚至你上网找也不好找到具体出错的原因。看报错内容,应该是class前缺少一些东西导致他认为出错了,比如函数定义最后少了一个分号之类的。但是打开出错的文件一看,可能就一个include,然后就是class了,根本看不出少了什么东西。这里,了解c编译流程的同学就知道了,include...

2019-03-06 00:18:20 4332

原创 java.lang.VerifyError: Expecting a stackmap frame xxxx

最近在测试一个java写的项目的时候遇到这个坑爹的问题。作为一个c++开发,看到这个报错表示慌的不行。这个错误后面就是一个Location,报出了具体调用的函数名,然后下面是描述: Expected a stackmap frame at this locaiton然后就是一堆看不懂的Bytecode,之后是一个Stackmap Table,同样看不懂。我相信给出的信息看不懂是我菜的缘...

2019-01-26 21:05:20 2675

原创 smart-deleteion-vim——让你的回删更智能

vim提供非常丰富的删除方式。normal模式下:x——直接删除某个字符 dd——删除整行 dw——从当前光标开始,删除到单词末尾 d^——从当前光标开始,往回删除到行首 d&——从当前光标开始,删除到行尾 dj——删除当前行以及下一行 dk——删除当前行以及上一行 。。。对,d可以跟各种移动方式组合,只要你熟悉vi内的光标移动,你可以把d命令玩出花来。inse...

2019-01-26 20:46:12 306

原创 Codeforces Round #514 (Div. 2)

嗯,我又来水codeforces了A. Cashier很简单,从头到尾读入客人到达的时间,然后跟上一个客人服务结束时间进行求差,然后除以吸烟时间即可(嗯,补一句,吸烟有害健康)。注意处理初始状态和结束状态即可。#include <bits/stdc++.h>using namespace std;typedef unsigned long long ull;typ...

2018-10-07 00:12:12 226

原创 Codeforces Round #509 (Div. 2) 解题报告

A - Heist某个店被抢劫了, 只记得所有的商品是从x开始标记,然后有y个,现在只知道剩下的商品的标号,求最少被偷了多少商品。很简单了,排序,然后从头到位遍历一边,看中间缺了多少,就加多少就行n = int(input())keyboards = map(int, input().split())keyboards = sorted(keyboards)#print(k...

2018-09-18 00:33:28 302

原创 Codeforces Round #508 (Div. 2)

A. Equality给定一个字符串,求最长子字符串,要求所有字符出现次数相同。注意,由于要求使用的字符数k已经给出,但是不一定全部出现在字符串里,所以可能只能构造空字符串。很简单了,先将所有字符的出现次数统计出来。然后看k个字符出现次数最少的那个,然后将最小出现次数乘以k就行了。[n,k] = map(int, input().split())const = input()co...

2018-09-12 23:28:44 226

原创 Educational Codeforces Round 50 (Rated for Div. 2)

A. Function Height在一个坐标轴上, 给一个n,在2n+1长度的轴上,允许调高任意一个奇数的点的高度,形成一个三角形,每个三角形会框出一个区域。所有跳高过的点的最高点,称为坐标最高点。求,给定n,要圈出k面积的区域,求怎么调整每个点的高度,使得最高点最小。嗯。。。说实话题目挺绕的,但是其实非常简单。。。不管如何调整高度,框出来的三角形面积总是跟高度相同,因为:S = 2...

2018-09-10 21:53:45 245

原创 Codeforces Round #507 Div. 2

A Palindrome Dance题意是已有三种舞者,还没订衣服的,买了黑色衣服,买了白色衣服的。然后需要给没有订衣服的买衣服,黑色衣服和白色衣服分别一个价格,然后求使得已经安排好位置的舞者们能形成镜像对称的衣服购买方法(比如 黑黑白黑黑就是镜像对称的)。策略很简单,对于某个位置i,对应的位置n-i,如果有一个已经决定了衣服,就只能买对应的衣服了。如果两个人都决定了衣服,衣服不一样,则输...

2018-09-07 22:33:40 223

原创 Manthan, Codefest 18 几个简单题目分析

A Packets大概内容就是你有n个硬币,要求将这n个硬币分成x份,使得给出任意k, 1 <= k <=n, 可以从x份硬币中拿出任意份,组成k。求最小的x。考虑对于任意整数n,都可以表示为一个二进制数字。这就是最简单的分割方法了,分配出来就是1,2,4,8,16 。。。。2^(x-1),n-2^(x-1)n = int(input())def find(x, ...

2018-09-07 21:26:12 238 1

原创 iterm2高级应用

自动切换profile先上文档 profile-switching经常用这个功能来区分服务器和本地环境。设置多个不同色调的profile,检测到服务器的时候,切换到高亮的profile,本地就切换回来。对于服务器环境使用GBK编码的情况也很实用。具体方法是在preference->profile里面,选中对应的profile,然后切换到advanced,下面有一个automati...

2018-09-05 19:44:04 7329

原创 codeforce AIM Tech Round 5几个简单题目

1,A,Find Square这个简单了,题目限制了输入只有一个正方形。找到黑色的部分,然后就开始读一个长。之后算中心就行了。代码都不贴了。2,B unnatural Conditionals要求的条件很神奇,要求对于给出的m,n,求两a,b,使得:s(a) >= ms(b) >= ms(a+b) <=n其中s函数表示针对整数x,求每一位数的和。例如...

2018-08-30 20:00:45 243

原创 poj 1061 青蛙过河

题目中文的,就不赘述题意了。推理过程:题目实际是求一个k,领得(km + x) %L == (kn + y)%L 。 上式可推理为 (k(m-n) + (x -y )) %L == 0 也就是求同余方程 ax %M == b %M同余方程参考扩展欧几里德算法。网上有很多资料了,不再赘述。#include <iostream>using namespace std;...

2018-08-12 15:06:49 191

原创 poj 1011 sticks

简单来说就是有很多长度相同的木棍,被切分为不同长度,然后要求重新拼起来,看拼起来之后,长度相同的木棍,最短是多少长度。这里看到几个问题拼起来之后长度应该是一样的 从条件一推断,最段长度minL应该满足total_len % minL == 0,即最小长度可以整除总长度 从结论二可以推断,拼好之后最短长度应该大于所有木棍里面最长那根木棍 同样从条件一推断,最大长度是所有木棍的总长度,也...

2018-08-11 16:17:45 198

原创 Poj 1065 wooden sticks

题意大概是,有很多木块,需要进行加工,如果木块的长度和重量都大于等于之前加工的,就不需要等待,否则需要等待一分钟,问加工这些木块最少需要多少时间。这个问题如果按照长度l排序,然后根据重量w排序,之后就只需要求排好序的数列里面,单调不递减子序列的最少数量N。方法一:直觉贪心这个题目有两个AC的方法。先说一个能AC,但是不能证明正确的,就是贪心算法,从头到尾遍历数组,每次都拿第一个比当前最...

2018-08-10 21:45:05 230

原创 Poj 1088 滑雪

嗯。我又无聊的来写ACM了,就当是玩玩好了,对,还是ACM好玩。题目给出一个山势图,用于滑雪,人可以从高的地方滑到四个方向中低的地方。求最长的滑雪线路,地图尺寸最大为100*100。首先地图有一万个格子,如果每个起点进行搜索都进行强制深搜,其实可能有点慢(不过看题目也就一个测试用例,估计慢点也能接受)。考虑到一个起点p,如果周围的起点,最长路径长度已知,那么这个起点的最长路径必然满足m...

2018-08-08 20:13:40 179

原创 http post请求发两个tcp包后续

离上次讨论http的post请求已经过去很久,貌似还有同学对于是不是会发送两个包感兴趣,所以这里补充一些内容。上次已经说到,大多数http post请求,都是一个tcp包发出去的,也就是不存在所谓的先发一个头,然后发body的。但是我没抓到不代表就没有,毕竟人家还因为ruby的http post请求发多个包导致了明显的延迟,所以到底有没有这样的事情呢?既然人家说了,ruby有,我就拿rub...

2018-08-08 19:16:24 10897 7

原创 《垃圾回收算法手册——自动内存管理的艺术》书评

这是一本学习垃圾回收不可错过的书。最初知道真本书是跟朋友讨论起来垃圾回收的问题,然后发现了自己是多么无知。。。然后开始了阅读这本书。当然,还有一个让我看这本书的原因就是我一直对高级语言的垃圾回收系统处于一种我知道它存在,但是不知道怎么用,并且如果出问题了不知道怎么处理的状态。书籍内容这本书前面几章大致讲了一下集中基础的垃圾回首算法,包括标记清扫,标记整理,半区复制式回收,引用计数回收等。后面的内容...

2018-06-09 22:25:06 636

原创 《Wireshark网络分析的艺术》《Wireshark网络分析就这么简单》书评

这两本书是应该算是同一个作者写的两个版本吧。两本书独立看,都是没有问题的。书籍内容这两本书基本就是讲述作者如何使用wireshark解决在工作,生活中遇到的网络问题。每一个小节都是一个独立的网络问题,涉及面非常广,几个tcp协议性能调优案例,几个ssh登陆延迟原因分析,几个防火墙行为分析等。更重要的是,作者写的文章都非常平易近人,读起来没有任何压力,属于睡觉前当侦探小说看都没问题的那种。针对不熟悉...

2018-06-09 21:41:19 4105 4

原创 《操作系统——真象还原》书评

首先我对这本书的评价是正面的,这是一本还算不错的书。请以这个基调阅读本文。我也从来没写过书评,只不过这本书实在是让人忍不住要写一下,因为各种各样的原因。。。。书籍内容这本书大致就是在bochs虚拟机上面,实现一个简单的操作系统,实现的内容包括:MBR,loader,内存管理,中断管理,文件管理,系统调用,多进程切换(内核以及用户态)。基本上可以说是手把手,把代码一行行列出来,讲解得清清楚楚。如果希...

2018-06-09 20:50:24 4347 2

原创 chrome 浏览器报 NET::ERR_CERT_COMMON_NAME_INVALID 问题分析

为了防止更多的小白进入这个帖子,寻求一个无脑操作,我决定改title。是的,这个文章不能给你一个无脑照着操作的解决方案,只实际上,可以认为,ERR_CERT_COMMON_NAME_INVALID就是用一个错误的域名访问了某个节点的https资源。导致这个错误的原因,基本是dns污染 host设置错误 官方更新了dns,但是dns缓存没有被更新,导致错误解析。另外,多说一句,作为多年的服务器工程师,真心希望给位,不要在本地配置ip,请务必相信dns的力量。

2018-05-30 18:15:21 295365 5

原创 ubuntu16.04默认安装的bochs出现Fatal IO error

这个问题实际上非常奇怪,因为我的img只是一个简单的mbr而已,上面还什么都没有,就是hello world。但是在debuger界面点了continue之后,hello world是显示出来了,但是bochs挂了。更加诡异的是,每次挂掉的时候,倒数第二个错误信息总是不同的。还好最后一个信息相同:Debug: In file ../src/unix/threadpsx.cpp at line 26...

2018-05-13 01:31:46 873

原创 一次由Erlang垃圾回收导致的内存泄漏

最近有一个erlang的服务因为oom被kernel kill掉了, 由于从监控来说这个服务确实是内存不断增长。所以这个服务应该在哪里有内存泄漏才对。于是我又一次开始定位这个问题。定位到底哪个进程占用了最多的内存由于在另一个节点有一个没有crash,但是内存仍旧很高的节点,所以这个问题处理起来很简单。erlang提供了完整的运行时系统debug环境。这里我们用etop,根据memory排序,查看具...

2018-05-05 14:26:49 845

原创 云主机供应商防火墙导致的TCP连接无法建立问题

今天遇到一个非常诡异的问题。具体表现如下(两台机器分别用src和dst表示,两台机器在不同的数据中心,连接需要走公有网络)在src主机,访问dst的8181端口,发现连接无法建立。src访问dst的非8181端口,连接正常建立在src主机所在的集群,访问dst的8181端口,连接正常建立在其它外网设备访问dst的8181端口,连接正常通过内网访问dst的8181端口,连接正常两个服务器都没有设置防...

2018-04-11 18:53:37 1835

原创 Linux如何使用总计超过100%的内存

需求提出:数据库snapshot之所以有这个需求,是因为我手头有一个数据库工程,我们打snapshot的时候,是在愿进程调用一个fork,构造了一个子进程,在子进程dump数据的。但是数据库嘛,吃内存是肯定的,于是在我的渣渣虚拟机上,就遇到了内存占用在top观察超过60%,没法fork进行snapshot的窘境。于是我就想到这个问题:难道一个内存占用超过一定比例的进程,不能调用fork??毕竟,f...

2018-03-16 10:42:12 2527

原创 clang-tags--上下文关联的c++调用搜索工具及其vim脚本

实际上,用vim的一个很大的缺点,是没有一个好用的,能理解上下文的c++调用关系搜索工具以及代码补全工具。在IDE里面,鼠标右键查找引用,查找调用,出来的结果是经过语法分析的,补全也是根据上下文头文件弄的。但是vim里面没有这个东西,毕竟vim是编辑器,他不知道编译信息。这个问题从我开始工作,就困扰着我,一直是我没法愉快使用vim写cpp的原因,毕竟菜。后来,有了clang,以及clang com...

2018-03-11 11:45:56 802

原创 一篇文章搞懂c语言常量与指针的几个排列组合

这个也是一个比较经典的面试题。也很多人挺纠结的,而且我发现挺多人搞不清楚的。这里先说几个结论,后面在细细验证const int 和 int const是一样的。编译器都认为是int const类型星号,以及星号之后的内容,只修饰右侧的一个变量所以很简单了指向int常量的指针 const int *a , int const * a,都是对的指向int的常量指针int * const a指向int常...

2018-03-10 21:04:15 6114

原创 c语言的sizeof到底应该返回什么?

我发现这个面试问题难住了蛮多人的。总的来说,sizeof(x)返回的是该值x占用的存储空间的大小。但是,问题就出在这个"x"到底是啥?#include <stdio.h>#include <string.h>#define HELLO_STR "hello"#define HELLO_STR2 "hello\0"int hello(int input[3][3])...

2018-03-10 20:17:48 10556

原创 TCP三次握手的第三个ack丢了会怎样

这个是在网上看到的面试题,引用下原文的内容当Client端收到Server的SYN+ACK应答后,其状态变为ESTABLISHED,并发送ACK包给Server;如果此时ACK在网络中丢失,那么Server端该TCP连接的状态为SYN_RECV,并且依次等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包,以便Client重新发送ACK包。 ...

2018-02-24 11:45:11 7607 8

原创 TCP 重传三次握手的syn+ack以及最后一个ack包

我们的一个数据库出现了连接上去之后info请求不返回的问题,为了找到问题原因,我做了一个tcpdump,结果发现,他有大量重传tcp的第二个,第三个握手包,并且在重传几次之后reset:嗯,第一个syn包重传我遇到过了,见我之前的文章,但是第二个和第三个同时重传的,我还真没遇到过。而且在我的环境下,这个问题很神奇,因为:第一个包能到达,因为返回了第二个syn包。说明网络是好的。第二个包也回来了,说...

2018-02-23 17:20:12 9739 1

原创 断点续传式git clone(伪)

clone git的项目的时候,经常都会遇到项目很大,提交历史很长,导致clone的时候花大半天都clone不下来的问题。而且如果直接git clone,必须一次把所有的历史clone下来,否则失败就直接丢弃所有。如果只是需要最新内容,或者网络不好,总是网络中断的情况,非常不友好。git clone 的 depth 参数实际上,如果只需要看最新的提交,使用depth参数,就可以实现只clone最新...

2018-02-22 18:37:23 12168 2

原创 cc2541实现全双工串口读写

为何要自己写串口读写程序2541的osal封装已经封装好了串口的读写,为何要自己实现一次呢?这里最重要的原因是因为默认实现的串口读写程序会对低功耗功能有影响,以及默认串口程序在进入低功耗的时候会去控制rx,tx,ct,rt脚,而很多时候我们实际只用了rx,tx脚,另外两个脚被用于其他外设,所以为了增加控制,不得不自己写串口读写程序。本文针对2541的uart0编写,uart1口对寄存器做相应修改即...

2018-01-04 21:05:54 864

原创 HTTP POST请求发送两个TCP包?

今天瞎逛的时候看到有一篇16年的文章,说99%的人理解错了HTTP中GET与POST的区别。前面大部分文章都没问题,但是最后有一个,被作者奉为大boss的区别:我读得书少,你不要骗我。于是我随手拿公司的http服务,做了一次post请求然后用wireshark抓了个包,结果: 好了,http的一个post请求只发了一个tcp包,不用怀疑。 然后为了不愿望作者,我仔细看了...

2018-01-03 16:39:54 26967 18

原创 MQTT协议QoS2 准确一次送达的实现

MQTT QoS熟悉MQTT协议的同学们一定知道,MQTT的publish有三个QoS,0,1,2。他们分别是:QoS0,最多一次送达。也就是发出去就fire掉,没有后面的事情了。QoS1,至少一次送达。发出去之后必须等待ack,没有ack,就要找时机重发QoS2,准确一次送达。消息id将拥有一个简单的生命周期。QoS0QoS 0 对服务器来说很好处理,什么都不存,找到要发给谁,我给你发,收不收得

2018-01-02 13:04:48 28423 12

原创 10倍性能!主动服务降级带来更好的性能

雪崩效应当一个服务已经负载不了当前的请求压力的时候,应该主动暂停或者拒绝新到来的服务请求,以保证自身存活,以及防止雪崩效应。我们举一个例子来说明雪崩效应。比如说有一个erlang的进程:突然收到大量请求,请求数远大于该进程的处理能力。如果这个时候这个进程决定服务所有请求,就需要将所有请求buffer在内存中,然后一个个处理(或者好几个并行处理)。这个时候,由于大量请求占用了

2017-12-19 00:02:34 587

原创 erlang序列化工具性能对比(erlang protobuf和term_to_binary对比)

公司内部最近做了一个性能测试,发现逻辑处理服务的加解包速度不行,于是做了简单的benchmark,比对了公司用的protobuf库和term_to_binary的性能差异。想看看性能如何。公司用的是basho的erlang_protobuffs ,挺旧的了,而且已经不再维护。先贴测试结果,本测试在我的mac上,用fusion虚拟的1核2g的ubuntu12.04,erlang16R3,跑的结果还是蛮

2017-12-18 23:53:57 958 2

原创 对emqttd做benchmark的时候遇到的几个坑

为了测试emqttd在我们的刀片机上面的性能,我们做了一次benchmark,遇到了几个有意思的问题使用emqttc全力发送pub反而吞吐下降了官方使用emqttc做了一个benchmark工具,其中有一个pub端,可以起n个连接,每隔m毫秒发送一个数据包。其实现隔时间发送publish的功能,是通过erlang的time模块每隔一定时间就往发送者线程发送一个publish消息实现

2017-12-09 21:23:05 2328 2

空空如也

空空如也

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

TA关注的人

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