自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yinn

……

  • 博客(97)
  • 收藏
  • 关注

原创 B站课代表神器--一键获取B站视频的完整字幕

Hello,大家好,各位经常逛B站的小伙伴们,不知道大家每次刷B站视频时,是否和我有同样的想法:比如,看到最后主题升华的鸡汤视频,满分作文的文案,恨不得现场拿笔摘抄下来;又比如,看完一段满满干货的科普类视频,点击收藏之余,很想获取到整篇文案,保存到手机,背诵下来,好作为和别人聊天分享的谈资;又或者,在B站学习线上课程,经常听到后面忘了前面老师说了啥,此时在想要是有老师的完整笔记就好了,虽然每个学习视频下的评论区都有课代表总结,但课代表总结得难以覆盖全自己想要的全部点,每每这个时候都暗自幻想,要是能有

2021-03-24 11:11:22 20508 12

原创 跨服务器拷贝文件,你能想到最快的方式是什么?

方案一:gzip+scp+gunzip第一种方式,很容易想到,先在源服务器gzip进行压缩,然后再scp到目标服务器,最后在目标服务器进行gunzip解压:server1执行命令:server1$: gzip -c data.txt > data.gzserver1$: scp data.gz root@server2:/data/server2执行命令:server2$: gunzip /data/data.gz这大概是最简单的实现方法了,但是效率不高,因为涉及到压缩、复制、解压缩

2021-02-15 23:38:57 951 1

原创 实例讲解MySQL的join、inner join、out join、left join、right join的区别

一、初始化构造数据:班级表t_class:3行数据,c1、c2、c4,其中c4是t_student中未包含的。学生表t_student:6行数据,t1~t6,其中t6是t_class中未包含的。CREATE TABLE `t_class` ( `cname` char(200) CHARACTER SET utf8 DEFAULT NULL COMMENT '班级名', `teacher` char(200) CHARACTER SET utf8 DEFAULT NULL COMMEN

2021-02-15 15:38:07 5669 3

原创 6个实例详解如何把if-else代码重构成高质量代码

本文提纲:为什么我们写的代码都是if-else?这样的代码有什么缺点?是否有优化的方法?如何重构?异常逻辑处理型重构方法状态处理型重构方法为什么我们写的代码都是if-else?程序员想必都经历过这样的场景:刚开始自己写的代码很简洁,逻辑清晰,函数精简,没有一个if-else,可随着代码逻辑不断完善和业务的瞬息万变:比如需要对入参进行类型和值进行判断;这里要判断下

2017-09-11 23:47:12 61822 25

原创 tcp三次握手、四次挥手涉及到的优化参数【全】

tcp三次握手tcp_syn_retriestcp 发送syn重试次数,默认6次net.ipv4.tcp_syn_retries = 6第 1 次重试发生在 1 秒钟后,接着会以翻倍的方式在第2、4、8、16、32 秒共做 6 次重试,最后一次重试会等待 64 秒,如果仍然没有返回ACK,才会终止三次握手。所以,总耗时是 1+2+4+8+16+32+64=127 秒,超过 2 分钟。tcp_max_syn_backlog半连接状态的队列大小,默认1024net.ipv4.tcp_max

2020-08-12 01:04:46 728

原创 阿里云关于改进TIMEWAIT的不靠谱建议

问题过程某台nginx服务器的timewait状态较多,看网上大部分的解决方案都建议打开快速回收内核参数。阿里云文档 https://help.aliyun.com/knowledge_detail/41334.html#TxtER 同样也建议打开:net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout = 30修改:vi /etc/

2020-08-08 19:41:06 382

原创 nginx的启动方式不对会导致不堪想象的后果!

这里写自定义目录标题前言问题过程原因解决方案总结前言nginx是当今最流行的高性能HTTP和反向代理web服务器,但你平时是用以下哪种方式启动nginx的呢:1、/usr/sbin/nginx2、service nginx start3、systemctl start nginx你知道3种启动方式有什么区别么?其实2、3两种方式是一样,那问题就变成是直接用/usr/sbin/ngi...

2020-04-06 00:25:59 694

原创 定位解决php报500错误过程

过程部署一个php工程,请求接口提示500:第一步:加错误输出 ,入口首行:error_reporting(E_ALL);再次执行,还是500,页面无错误信息。第二步:看php错误日志,找下php日志路径:php -r “phpinfo();” | grep -I error_logerror_log 没有配置,在php.ini新增:error_reporting = ...

2020-02-11 13:13:41 2802

原创 面试高频题目:一种优雅对称的快排源码实现

排序算法是整个算法体系中的最核心的一大块,而快速排序又是排序算法中最核心的一种实现,相信大家都懂排序算法的原理:快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的...

2020-02-07 17:21:12 309

原创 Java中String、StringBuffer、StringBuilder有什么区别?

String 是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。StringBuffer 是为解决上面提到拼接产生太...

2019-08-26 17:51:47 333

原创 都9102年了,还在基于Redis/zookeeper/etcd自己实现分布式锁?

都9102年了,还在基于Redis/zookeeper/etcd自己实现分布式锁?分布式锁在分布式系统中,分布式锁的使用场景很多,比如多机部署但同一个时刻只希望单个节点运行,这是就需要用到分布式锁来实现,要实现好一个逻辑完备的分布式锁需要考虑的点很多:如何解决竞争问题如何防范惊群效应获取到锁的节点异常退出其他节点能否重新获取到锁网上关于分布式锁的实现的文章很多,有基于Redis实现...

2019-03-25 22:15:06 2496

原创 实现前后行相减的SQL该如何写?有两种方法!

背景有时会有这样一种查询场景,需要对查询结果前后行操作,比如后一行减前一行。比如有一张用户登录表,有登入和登出两行,需要相减简单计算在线时长。或者一张订单表,需要计算后一行的订单id和前一行的订单id差多少(假设订单号是单调递增的)。针对这类场景,SQL语句改如何写呢?表结构和数据构造以统计前后行的订单号是否连续为例,表结构:CREATE TABLE `t_test3` ( `i...

2019-01-14 21:03:26 22923

原创 go新手容易犯的几个错误

前言最近写go遇到几个坑,做个记录,以免再犯。高居榜首:通道未初始化看下面的代码执行的结果是什么?package mainimport ( "fmt" "time")type test struct { name string}type Object struct { Ch chan *test}func main() { go test1() time...

2018-11-05 00:36:00 390

原创 一种浅显易懂理解链表高频面试题的全新思路

前言我们都知道链表相关的算法题是笔试,面试的高频题,往往链表题的实现代码通常只有几行,但很多人被链表的指针指来指去,极容易绕晕。比如链表反转的一种实现: ListNode *Reverse(ListNode *pHead) { ListNode *pre = NULL; ListNode *cur = pHead; while (cur)...

2018-10-27 09:50:52 476

原创 websocketpp库编译的心路历程

前因后果最近需要用到websocket,google找到star最高的websockpp库,打算引入进来,但整个编译过程异常艰辛,出现各种异常错误,本文做个统一记录和梳理,以作备忘。编译过程github下载源码https://github.com/zaphoyd/websocketpp编译demowebsocketpp/examples/echo_client先来看下CMakeL...

2018-10-21 10:52:12 7751 2

原创 记一次坑爹的golang 二维map判断问题

现象贴代码:var PeopleLimit =make(map[string]map[string]int64)func foo(arr1,arr2 string){ if x,ok := PeopleLimit[arr1][arr2];ok{ fmt.Println(" ok") fmt.Println(x) }else{ PeopleLimit[arr1] = mak...

2018-10-18 23:16:21 2476

原创 jenkins配置android自动打包平台

目的采用jenkins,关联git,自动拉取最新代码,自动打包Android apk包,一方面解放开发打包慢的问题,另一方面方便测试打包回归,节省人力。 整个搭建过程遇到比较多小问题,后面都一一解决,本文做个记录。搭建流程配置java环境这个略过gradle安装apt install gradle下载sdkmanagerhttps://developer....

2018-06-30 13:31:33 4964

原创 linux设置开机自启动脚本的最佳方式

公司的开发机经常因为断电被重启,服务都得手动一个一个启动,专门研究了下如何设置开机自动重启脚本。设置开机启动方式一最简单粗暴的方式直接在脚本/etc/rc.d/rc.local(和/etc/rc.local是同一个文件,软链)末尾添加自己的脚本 然后,增加脚本执行权限 chmod +x /etc/rc.d/rc.local设置开机启动方式二第二种方式是在crontab中...

2018-05-28 21:32:25 89806 11

原创 redis源码解析--跳跃表

一、什么是跳跃表?定义: 跳跃表是一种有序数据结构,它通过在每个节点中维护多个指向其他节点的指针,从而达到快速访问节点的目的。注意几个关键词:有序:结构是有序的每个节点维护多个指针,本身结构是链表形式,和普通链表的不同之处在于每个元素内含多个指针跳跃表支持平均O(logN),最坏O(N)复杂度的节点查询,大部分情况下,跳跃表的效率可以和平衡树相媲美, 并且因为跳跃...

2018-05-26 12:50:41 656

原创 etcd常见问题汇总

1、使用etcd clientV3 写入,etcdctl读取不到问题使用github.com\coreos\etcd\clientv3\example_kv_test.gofunc ExampleKV_put() { cli, err := clientv3.New(clientv3.Config{ Endpoints: endpoints, DialTime...

2018-05-23 20:46:44 5481 1

原创 C++一道深坑面试题:STL里sort算法用的是什么排序算法?

前言当你第一眼看到这道面试题是不是心里在暗喜,一问算法题就比问排序算法,一问排序算法就问快速排序。如果你回答:STL里的sort算法肯定用的是快速排序啊?难不成还是冒泡排序么?如果你只是回答快速排序,那么恭喜你只答对了33.333%,离正确答案还差一大截。回答完,接着会引来一堆问题轰炸:数据量大和数据量小都适合用快速排序吗?快速排序的时间复杂度不是稳定的nlogn,最坏情况会变成n^2,怎么解决复...

2018-04-30 10:12:23 19806 4

原创 关于分布式唯一ID生成的几点思考

目录什么是分布式唯一ID?唯一ID需要满足什么特性?市面上通用的解决方案几点自己的疑问和思考什么是分布式唯一ID?为什么要用全局唯一ID?先说一个具体例子: 某商城订单数据表,如果订单数据放到一张表内,那订单ID可以简单使用数据库表的自增id,可以保证订单id递增不会重复。但是,随着业务越来越庞大,单表数据量太大,会出现数据库瓶颈问题,这时往往要对订单表进行分库分表,多机房部署,可以按日

2018-04-27 23:14:07 1048

原创 查看虚拟内存地址空间的方法

列表:地址空间分为哪几段?每一段存放什么?怎么查看前言操作系统对每个进程都分配了完整的虚拟内存地址空间。进程会把整个地址空间分成多个区间来使用。堆和栈,是程序员最熟悉的部分了,除了这两块区间外,还有其他的内存区间,用来存储代码、静态、全局变量等等。一图胜千言地址空间分为哪几段?地址空间分析,从低到高: 1. TEXT段:整个程序的代码,以及所有的常量;这部分内存是是固定大小的,只

2018-04-26 20:23:26 2620

原创 区块链面试指南--之共识算法

最近,一张关于区块链高薪职位的招聘照片火爆网络:可以看到,月薪远远高出行业其他工程师一大截,可以说简直完爆!基本覆盖国内一线互联网大公司,最高月薪达100K。当我们还在了解什么是区块链的时候,行业巨头已经开始纷纷招兵买马,布局区块链。不知不觉中,一个新兴的工作岗位正在慢慢诞生:区块链研发工程师。对于普通传统的程序员群体,该怎么向区块链靠齐呢?错过了AI,大数据,人工智能,能否搭上区块链的末班车?我...

2018-03-13 12:58:27 15224 3

原创 cmake报Modules directory not found in错误解决方案

问题最近编译一个新项目,要求cmake版本大于VERSION 3.5.1 本机是VERSION 2.8.12, 于是直接到cmake官网下载最新版本: https://cmake.org/download/编译完直接把cp 1bin/cmake /usr/bin/覆盖原来的cmake版本, 但,悲剧发生了,运行直接报错错误:[root@GD-DEV scripts]# ...

2018-03-13 11:25:03 11092 2

原创 李笑来《财富自由之路》思维导图

最近看李笑来的《财富自由之路》做的笔记和总结。

2018-03-09 14:35:19 13621 1

原创 MySQL 8.0新特性--让你轻轻松松找到配置项的位置

前言我们都知道,MySQL配置项可以从多种方式设置:1、在配置文件中定义, 查看配置路径:mysqld --verbose --help| grep -A 1 "Default options" /etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf2、通过命令动态修改set global var=value;

2017-11-19 10:45:25 10057 1

原创 multi-paxos和raft区别

什么是raft?Raft论文中都做了详细的描述,语言清晰,我这里仅做下认为非常重要的点的记录:数据流向是由leader流向follower的,follower和leader不一致,以leader为准修改follower本地日志2.leader的选举中,如果follower发现candidate的日志比本地日志少,follower不投票给candidate,这就保证了选举出的leader覆盖了大多

2017-10-08 10:53:24 3208

原创 paxos工程中的运用-multi-paxos

什么是multi-paxos上篇介绍了paxos的理论知识[http://blog.csdn.net/qq_35440678/article/details/78080431],要在实际工程运用大多数使用multi-paxos协议,原因是朴素paxos每次提议都执行完整paxos协议代价过大-3次网络交互,2 次本地持久化,因此,multi-paxos引入leader概念,较少paxos的prepa

2017-09-27 12:42:40 1159

原创 理解这两点,也就理解了paxos协议的精髓

什么是paxos协议?Paxos用于解决分布式系统中一致性问题。分布式一致性算法(Consensus Algorithm)是一个分布式计算领域的基础性问题,其最基本的功能是为了在多个进程之间对某个(某些)值达成一致(强一致);简单来说就是确定一个值,一旦被写入就不可改变。paxos用来实现多节点写入来完成一件事情,例如mysql主从也是一种方案,但这种方案有个致命的缺陷,如果主库挂了会直接

2017-09-24 22:15:23 17527 10

原创 tcpdump学习笔记记录

前期准备要想学会tcpdump,最起码需要对tcp/ip协议有一定了解,比如tcp三次握手,相关只是可以看看《计算机网络》或者《TCP/IP详解》。tcpdump使用格式格式: tcpdump [ -AbdDefhHIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ] [ -C file_size ] [ -

2017-08-09 09:21:52 690

原创 《复盘》思维导图

最近看了《复盘》这本书,有些方法论不错,做了个思维导图,要原图的留邮箱。

2017-07-16 12:54:49 8861 2

原创 《Java多线程编程核心技术》笔记

前言《Java多线程编程核心技术》这本书例子太多,基本占一半的篇幅都是例子代码,真正的干货比较少,记录几点新知识。synchronized和volatile关键词区别关键词volatile是线程同步的轻量级实现,性能好,volatile只能修饰变量,而synchronized可以修饰方法以及代码块。多线程访问volatile不会发生阻塞,而synchronized会出现阻塞;volatile能

2017-07-16 12:46:16 593

原创 java多线程基础

java多线程基础java实现多线程有两种方式: - 一种是继承Thread类 - 另一种是实现Runnable接口 那么,两者有什么区别呢?public class Thread implements Runnable从上面的Thread源码可以看出,Thread类实现了Runnable接口,他们具有多态关系,因此区别就是:使用Thread类的方式创建新线程不支持多继承,因为java语言的特

2017-07-08 17:40:35 318

原创 open-falcon资料汇总

前言本周末了解了下小米开源的open-falcon监控系统,上网搜寻了部分资料,感觉还不错,把资料做个汇总。资料列表最重要的资料还是官方wiki[https://book.open-falcon.org/zh/intro/index.html] 架构图重点推荐极客学院的讲解视频:http://my.jikexueyuan.com/ulricqin/record/ 作者本人主讲的,看视频跟着作者思

2017-07-02 23:04:16 917

原创 effective Java读书笔记-通用程序设计

最近继续在翻阅《Effective Java》,这是一本java的经典书籍,需要好好研究研究,现记录一些自己学到的新知识点。1.for-each循环优先于传统的for循环java 1.5发行版本以前遍历的做法:for(Iterator i = c.iterator;i.hasNext();){ doSomething((Element)i.next);}java 1.5发行版本引入for-

2017-05-29 19:50:31 422

原创 Java 枚举类型

1. 简介看java关于单例的实现博客: http://coolshell.cn/articles/265.html 里面都提到通过枚举实现单例,周末抽空看了java枚举类型,做个记录。Java枚举类型背后的基本想法非常简单:他们就是通过公有的静态final域为每个枚举常量导出实例的类。因为没有可以访问的构造器,枚举类型是真正的final。因为客户端既不能创建枚举类型的实例,也不能对它进

2017-05-14 22:58:21 325

原创 最近C++开发过程中遇到的一些坑

1. 对齐引发的bug最近在移植一个项目代码,发现编译后报字节长度和客户端定义的长度不对,但是代码是直接移植过来的为什么会不对:struct Head{ uint32_t a; uint32_t b; uint32_t c; uint32_t d; uint32_t e; uint32_t f; uint32_t g; uint32_t h; uint64_t i; uint6

2017-05-12 10:05:17 605

原创 effective Java读书笔记:创建和销毁对象

第1条:考虑用静态工厂方法代替构造器静态工厂方法与构造器不同,有以下几个优势: 1. 静态方法有名称。 构造器的参数本身没有确切地描述返回的对象,静态工厂方法可以,比如:newInstance() 2. 不必在每次调用他们的时候都创建一个新对象。 说白了,可以在静态工厂方法里面控制实例是否可重用,可以缓存对象等。Boolean.valueOf(boolean)就是一个很好的例子。

2017-05-01 18:07:36 450

原创 java容器梳理

一:一图胜千言 Collection 存放独立元素的序列。提供一些处理容器类静态方法,比如二分查找,排序等等。Collection下又有三个子接口,List,Set,Queue。List一个有序的Collection(也称序列),元素可以重复。确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null

2017-04-21 09:05:57 410

空空如也

空空如也

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

TA关注的人

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