- 博客(81)
- 资源 (2)
- 收藏
- 关注
原创 用golang实现traceroute
traceroute工具原理不难,但要实现这个过程需要涉及到一些基本知识,如ip的报文组成、udp、icmp协议的一些基本知识,另外就是需要知道路由跳数的基本原理,通过实现这个过程也可以加深这些基础知识,同时是对这些知识的运用。完整代码已经上传到github,地址为:https://github.com/Kseleven/traceroute-go,欢迎大家star,当然如有纰漏或者讲解不正确的地方,欢迎指正。
2023-04-20 00:09:13
594
原创 深入浅出DNS
深入浅出DNS概念DNS(Domain Name System)是一个分布式分级管理的数据库。他存储的是hostname与IP的对应关系、邮件路由信息以及其他互联网应用数据等等。Domain Name说到DNS就离不开域名(Domain Name),因为DNS主要解析以及存储的对象是域名相关的数据。域名是一种树状结构,形如:www.baidu.com的多级文本构成,其中不同层级用"."来进行区分。同时域名的层级是从右往左递增的。例如上面的www.baidu.com从右往左开始根域名是".",我
2021-10-16 22:07:15
567
原创 DNS+Anycast 均衡负载实战(IPV4)
我们建立了一个IP为6.6.6.6内网DNS服务器群,所在网段为10.211.77.0/24,而我们要实现的是在PC端(网段10.211.66.0/24)能ping通6.6.6.6,同时执行命令dig www.baidu.com @6.6.6.6 A,能得到文章最开始的dig 8.8.8.8类似的返回结果。
2021-03-26 10:12:50
4187
2
原创 golang切片slice容量capacity增长原理
golang切片slice容量capacity增长原理引子:我们都知道golang的slice,会根据增加的元素个数不同而自动扩容,但是这个自动扩容机制是如何的呢?可能我们都知道当slice的容量小于1024时时2倍增长,但是1024以后增长规则就比较模糊了,今天就一起来揭开这个面纱。例子如下:func main() { var s []int for i := 0; i < 1283; i++ { fmt.Println(i, len(s), cap(s)) s = append
2021-03-13 19:10:23
1310
2
原创 深入理解DNS系列——概念篇
DNS(一)ConceptionDNS(Domain Name System)是一个分布式分级管理的数据库。他存储的是hostname与IP的对应关系、邮件路由信息以及其他互联网应用数据等等。Domain Name说到DNS就离不开域名(Domain Name),因为DNS主要解析以及存储的对象是域名相关的数据。域名是一种树状结构,形如:www.baidu.com的多级文本构成,其中不同层级用"."来进行区分。同时域名的层级是从右往左递增的。例如上面的www.baidu.com从右往左开始:根
2020-09-19 23:23:40
662
原创 算法基础(golang版本)——冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。一。算法演绎步骤1.两个循环,外循环以及内循环。2.外循环每偏移一个元素就将此元素与内循环的每一个元素进行对比,如果比其大,那就交换位置,直到没有比此元素更大的为止。然后进入下一个循环,直到遍历完所有的元素。我们按.
2020-08-08 22:15:10
216
原创 算法基础(golang版本)——插入排序
插入排序,顾名思义就是利用插入的方式进行排序,他的演绎过程就好比斗地主的时候摸牌的过程。假设我们手上有2,3,5,10这4张牌,这时候从牌桌里摸上一张7,这时候为了插入到合适的位置一般会从右边开始进行对比,例如10大于7那么,7应该往左偏移进行比较,然后再看5小于7,那么7就应该放在5的右边,这时候7就插入到下标为3的位置,同时10往右挪一个位置。这就是插入排序的演绎过程。一。基于以上演绎过程,我们用golang来进行实现:func insertion(data []int) { for j :=.
2020-08-05 23:36:33
618
原创 Golang用20行代码实现斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家莱昂纳多·斐波那契(LeonardodaFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1,F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963年起出版.
2020-07-31 22:13:27
748
原创 golang解决约瑟夫问题,单向循环链表实现
据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最.
2020-07-31 22:02:15
354
原创 Mysql 常用操作命令(一)
引子:Mysql作为日常开发必不可少的工具,其基础也是必须掌握牢靠的,我们就从最简单的开始吧,循序渐进,步步为营。今天的主题是数据库与表的一些基本操作,这里以Revenge为数据库,以Person表为测试表。1.创建数据库CREATE DATABASE Revenge;2.删除数据库DROP DATABASE Revenge;3.选择数据库USE Revenge;4.创建表PersonCREATE TABLE Person( `Id` bigint unsigned auto_i.
2020-07-29 02:04:00
283
原创 通俗易懂:Nginx正反向代理,买瓶可乐就能理解
我们都知道Nginx之所以强大,正式在于它的代理功能,特别是反向代理,在集群、负载均衡上可谓大显身手。那么什么是正向代理以及反向代理呢?今天我们不用专业术语,而是用简单易懂的买东西的原理来举例。一.正向代理情景:【小明】想要到【解忧杂货铺】去买可乐,但是来到杂货铺,门关着的并且挂着牌子写着:“只有会员才能进门买商铺”。这时候【小代】对小明说他有杂货铺的会员,可以帮小明买,于是小明每次去杂货铺...
2020-03-21 23:22:25
1040
1
原创 67行代码实现:模拟手机九宫格输入法
go日常练习,不定期提供golang小项目作为练手。望客官笑纳的同时也提出宝贵意见,纯手工码字不易,您的支持就是我创作的最大动力。对于每天手机不离手的我们来说,输入法太熟悉了,今天我们就用golang写一个简单的九宫格输入法,这里没有界面,只用了简单的控制台命令行输入。一.题设1.模拟手机九宫格输入,默认输入为数字,当输入#表示切换输入法,即数字与英文之间切换。2.连续输入数字输出不变:例...
2020-03-19 23:54:10
2661
原创 从微盟员工删库跑路看程序员的职业素养。
2020年2月23日19:00微盟收到系统监控警报,经排查后发现大面积服务器无法响应,最终原因是数据库数据被删除,而操作者是微盟研发中心运维部核心人员贺某。而这样程序员删库跑路的新闻屡见不鲜,作为一个程序员最基本的职业素养在哪里呢? 据悉贺某已经被刑事拘留,而他因个人精神、生活等原因才对微盟线上环境进行了恶意的破坏。仅因个人原因就将公司的数据删除,首先不考虑公司的原因,贺某的行为...
2020-02-27 16:15:28
3341
12
原创 Nginx高并发系列之二——Nginx开启ssl模块
在上一期中我们安装配置了nginx1.13.7版本并且成功启动,那么这一期就针对安装的Nginx支持ssl模块——即开启https功能。如果还有不知道如何安装与配置的请移至:Nginx高并发系列之一——Centos7.x上安装与配置Nginx首先,我们查看自己的Nginx是否开启了ssl模块,命令如下(注意这里是大写的V,如果是小写的v只会显示nginx的version):...
2020-02-13 16:31:16
937
原创 nginx高并发系列之一——Centos7.x上安装与配置Nginx
0.Nginx高并发系列之一——安装与基础配置Nginx.1.linux环境:2.nginx版本:这里以1.13.7版本为例子3.下载nginx包:[root@joker nginx]# wget http://nginx.org/download/nginx-1.13.7.tar.gz4.解压到相应的文件夹: mkdir -p /usr/...
2020-02-09 14:35:24
678
原创 我的2019书单
一.文学类1.《平凡的世界》——路遥2.《人生》——路遥3.《白鹿原》——陈忠实4.《狼图腾》——姜戎5.《人民的名义》——周梅森6.《挪威的森林》——村上春树7.《菊与刀》——鲁思·本尼迪克特8.《追风筝的人》——卡勒德·胡赛尼9.《月亮与六便士》——威廉·萨默塞特·毛姆10.《教父》——马里奥·普佐11.《百年孤独》——马尔克斯12.《傲慢与偏见...
2020-01-28 00:28:30
346
原创 Mac 安装brew时遇到curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
Mac 安装brew时遇到curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refusedmac在安装homebrew时候,国内的一些IP就会出现如此错误,原因就是被墙了。解决方法如下:1.翻墙再安装(亲测可用)2.换一个网络再试试,比如用手机开热点再试试。...
2020-01-28 00:05:47
2608
原创 tomcat高并发配置调优
最近部署的tomcat,里面放了一个apk提供给测试人员测试,二有一天压测的时候,他们一致反馈下载不了,结果查看日志才发现如下错误:INFO: Maximum number of threads (200) created for connector with address null and port 8091才惊醒这个tomcat根本知识解压就使用的,配置都没动过,肯定不能支持高并发了
2017-05-18 21:31:41
29176
6
原创 集群下的kafka实现多线程消费
上一篇文章讲述了如何部署kafka集群,而这篇文章则来探讨一下如何使用多线程消费,提高消费能力,保障数据的时效性。而实现多线程消费其实很简单,只需要三步即可:一:kafka集群配置多线程消费,说白了就是多区消费,kafka可以给topic设置多个partition,从而实现生产的时候提交到不同的分区,以减少统一区块的压力。而消费则是从不同的分区里拿数据进行消费。1.首先修改server.prop
2017-05-18 21:19:51
15100
原创 sync.WaitGroup的错误用法与纠正
sync.WaitGroup的错误用法与纠正本文主要是记录在学习golang语言过程中错误使用sync.WaitGroup以及指针引起的报错,并且纠正过程。1.错误使用场景main包的实现内容:package mainimport ( "fmt" "pressure/game" "sync")var waitGroup sync.WaitGroup //定义一个同步等待的组
2017-04-07 18:07:19
17347
2
原创 mysql因机器断电以后启动报错的问题
tag:记录一下因断电引起mysql无法启动的问题以及结局过程。便于以后翻阅。1.背景:本地架设了一台CentOS7系统作为本地测试服务器使用,上面安装了mysql2.问题情境:前一段时间因为公司电压不稳,经常半夜断电,早上起来又得重新启动服务器,而启动mysql的时候就会报如下错误:STOPPING server from pid file /var/run/mysqld/mysql
2017-04-07 16:02:03
1383
原创 unzip实现一次性解压多个文件夹,并且直接覆盖
最近在实现文件上传的时候,经常需要同一个文件夹上传多个相同路径的情况,就觉着这样很耗时间,特别是网速慢的时候,一个一个去上传,那是非常的慢,于是网上搜寻了一下一次性解压多个文件夹的命令之类的。都不太如意,于是就自己写了一个sh脚本。#!/bin/bash#本sh主要用于unzip解压多个文件夹的命令#事先获取需要解压的文件路径个数echo "正在检索文件夹:$#"#获取压缩的zip文件
2017-04-06 15:13:23
7575
原创 大龄程序员的发展之路
在我看来,重要的不是你选择了那条路走,不管是继续coding还是做管理,这只是一种选择,而是问心无愧。很多人说大龄了应该做管理,不然就是做码农无法生存下去亦或者没有优势之类的,这些都是外在的浮躁的表现吧。心中有目标也不会在意是否要跟随潮流,如果选择跟随反而是一种草率的决定。有人可以选择27、28岁才开始编程,有人可以选择30多岁开始画画,甚至有的人40多岁了才开始学钢琴,这些选择都是为了趋
2016-12-26 17:52:36
704
原创 kafka集群部署以及java客户端测试
kafka集群部署以及java客户端测试本文主要讲述本人的集群部署kafka过程以及遇到的问题: 其中:kafka版本为:kafka_2.10,zookeeper版本为:zookeeper-3.4.8,jdk-8u101-linux-x64 一 kafka以及zookeeper安装以及环境配置 二 zookeeper集群配置以及测试 三 kafka集群配置以及测试
2016-12-08 16:37:32
10397
5
原创 JAVA设计模式之三单例模式(Singleton)
单例模式是用处最多的一种设计模式了,他有如下几个好处: 1.保障jvm中只存在一个实例,避免了频繁创建类,节省开销。 2.调用单例类里的方法不用new,这样也降低了内存开销,同时调用方便。 3.一些只存在一个实例的方法或者对象,在单例模式下才能发挥独特作用,比如一些单例工厂,一些配置文件类的加载,或者一些工具类。那么,首先我们来实现一个单例类,如下是
2016-06-16 14:09:37
459
原创 JAVA设计模式之二抽象工厂
上一篇我们讲到了工厂方法模式,而通过例子以及实践,原有的工厂方法模式有一个问题,那就是如果需要拓展方法就必须对工厂类进行修改,这就违背了闭包原则。因此,对于需求的不断变化,那应生新的方法去解决问题,这就引入了抽象工厂模式。而抽象工厂只是在原有的工厂方法就行了调整,多出了一个接口用于拓展,这样如果出现新的需求就不用去修改原来工厂接口了,具体还是用代码来说明。 首先还是搭建工厂接口:p
2016-06-15 11:30:13
285
原创 一次值得深思的面试
因为离家太远,所以最近准备离京回老家成都找份工作,平衡一下家庭与事业。因此在各大招聘网站上广撒网的投递了简历,鉴于自己的工作经验还是比较自信满满的,然后就是坐等面试。这几天陆陆续续的来及几个HR的简单电话面试,但是都不够专业,所以简单的聊天就可以让对方信服。但是就在昨晚的一次技术负责人的电话面试中,给我深深的上了一课。 对方是一家做银行中间件的公司,主要是给银行提供一些软件服务,因此对
2016-06-15 10:10:18
509
原创 java设计模式之一工厂模式(Factory Method)
1.普通工厂模式 字面意思理解,就是工厂生产产品,同样的是生产produce方法,但不同的厂生产出来的产品是不同的。我们用一个简单的例子来实现:首先创建一个共用的接口类:/** * @author joker 2016-06-13 * 工厂的接口类,每个工厂同有的就是生产这个方法 */public interface FactoryInter { public v
2016-06-13 15:23:52
458
原创 mysql在百万数据量下查询慢的问题
这两天,越来越觉得自己做的玩家历史表,查询速度很慢,开始还以为是网络的问题,然后持续了一两天很快pass了这个想法。很可能是自己的查询速度慢,于是进入数据库看了一下,发现历史记录已经达到了600多万条了。随着dau的上升,玩家越来越多,乃至于历史记录也成倍的增长,虽然自己做了定时删除七天以前的记录,但还是承受不住巨量的人数增长带来的历史数据剧增。因此,本人操作数据库直接测试了一下查询历史记录的
2015-11-25 10:44:37
29965
12
原创 linux 安装rz sz方法
-bash: rz: command not foundrz命令没找到?执行sz,同样也没找到。那就是没有安装lrzsz,如下安装就可以了。安装lrzsz:# yum -y install lrzsz现在就可以正常使用rz、sz命令上传、下载数据了。使用方法:上传文件# rz filename下载文件# sz filename
2015-10-31 11:31:42
370
原创 重生的自己,仅此纪念2013年7月25日
2015年7月24日晚,窗外是进入北京北四环的主干道,已经晚上9点了,仍然是堵满了车。这些车都是往城外走的,因为大部分人都是住在5,6环外。上下班基本上都要花上2小时时间,所以是北京的生活节奏快,而快就体现在这个上班节奏吧,北漂一族每天的时间大部分都花在上班上了,要么在上班,要么在上班的路上。不知觉已经来这个城市半年了,自己也好久没有写过文章了,如果不是偶尔停下来思考一下几乎也会被这样的洪流卷走。
2015-07-24 22:33:08
537
原创 架构师之路(一)概念篇——选好了路子就走下去
一.序 本博客系列将从本人的经历以及一些学习基础上总结出来的,并且记录个人的架构师之路的历程,虽然可能这些经历在一些大神看来不入流亦或者只是一些皮毛,但本人相信路漫漫其修远兮,经过这样跬步的积累,我相信,架构师就在脚下。二.概念 当然,架构师这个词在目前来说还是比较含糊,并没有具体清晰的划分,而百度百科对于架构师的概念是:系统架构师是一个既需要掌控整体又需要
2015-03-14 12:53:43
748
原创 linux mysql中开启远程访问以及开启最大连接数
1.mysql -u root -pmysql> grant all on *.* to root@'%' identified by 'password'; flush privileges; #刷新刚才的内容2.修改mysql的最大连接数vi /etc/my.cnf编辑my.cnf在[mysqld]中加入:set-variable=max_c
2015-03-05 22:18:39
470
原创 centOS实现时间同步
在使用CentOS系统的时候,我们可能会遇到时间不准的问题,那我们如何解决这个我问题呢,下面就来教大家一个CentOS系统时间同步的方法,希望大家可以解决自己所存在的疑问。本人也经过一段时间的测试以及应用才得到一套比较实用的方法,这里分享给大家。CentOS系统时间同步的步骤如下:新装的CentOS系统服务器可能设置了错误的,需要调整时区并调整时间.1.没有安装ntpdate的可以
2015-03-05 22:14:24
635
原创 来京第十天
2015年3月5日,星期四,来到帝都的第十天。整体环境: 在这里一切都是这么的平淡如常,街道没有成都的繁华,人流没有成都的穿梭不息,晴朗的天气下却吹着寒冷的风,室外一切都如此的冰凉。唯独室内恰恰相反,室内则是暖和如春,但总体还是很干燥。今天查了一下天气,发现北京的空气湿度才8%-10%,而相比之下成都的湿度却是80%左右,想想这就是差距吧,这也是为何四川是养育美女的地方
2015-03-05 21:41:36
463
原创 Linux中find常见用法示例以及删除7天前的文件
·find path -option [ -print ] [ -exec -ok command ] {} \;find命令的参数;pathname: find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。-print: find命令将匹配的文件输出到标准输出。-exec: find命令对匹配的文件执行该参数所给出的shell命令
2015-03-05 21:26:41
14698
原创 HTML特殊字符ASCII编码
在分析HTML字节流或者源代码的时候,需要对HTML特殊字符编码以及ASCII的知识有所了解,才能避免跌入陷阱。一些所列举的都是HTML的一些规范,和ASCII码的官方定义表。放到这里查看方便。下面这个图片是常用HTML中一些特殊字符的ASCII编码或者表示方式。有些字符并没有对应的ASCII码。
2015-03-05 21:26:27
557
原创 改mysql端口后,启动mysql失败的解决方法
在CentOS上使用yum命令安装mysql后,使用默认端口3306能成功启动,但在/etc/my.cnf里更改端口,mysql启动不成功,后查阅相关资料总结如下:这是更改端口后,进入/var/log/mysqld.log里摘取的启动失败相关日志:130823 17:21:14 mysqld_safe Starting mysqld daemon with databases from /
2015-03-05 21:26:21
942
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人