- 博客(31)
- 收藏
- 关注
原创 今日头条笔试问题
题目链接可将问题理解拆分为:能否把一个序列,变成两个递增顺序的数组。#!/usr/bin/env python# -*- coding: utf-8 -*-# ***************************************************************************## Copyright (c) 2017 ByteDance.com, ...
2018-05-28 22:27:37 2176 1
原创 redis cluster pipeline问题排查
问题背景:问题代码: r = StrictRedis('10.20.23.45', 3901) print r.get('7551A63C3F2C0EA261AAE2B509ABC782172FE56DF64F64B6CB0B355E5A9D9FB7:u_feed_lt_ad_type_show:0') print r.get('1803D8B45F7371F0D...
2018-05-21 16:16:06 1608
原创 Java CAS 和 synchronized 和 Lock
CAS 机制适用场景:乐观认为并发不高,不需要阻塞,可以不上锁。 特点:不断比较更新,直到成功。缺点:高并发cpu压力大;ABA问题。ABA问题: CAS机制生效的前提是,取出内存中某时刻的数据,而在下时刻比较并替换。 如果在比较之前,数据发生了变化,例如:A->B->A,即A变为B然后又变化A,那么这个数据还是发生了变化,但是CAS还是会成功。Java中CAS...
2018-05-20 21:13:18 2171 2
原创 golang goroutine 并发递增
package mainimport ( "sync/atomic" "fmt" "sync")func main() { var wg sync.WaitGroup var a int32 = 0 // goroutine指向的外部变量地址 for i := 1; i < 100; i++ { wg.Add(1) ...
2018-05-18 15:18:14 708
原创 awk 简单使用
参考链接awk '$1>2 {print $1,$2}' test.txt # 第一行大于2awk '$1==2 {print $1,$2}' test.txtawk '$1==2 {print $0}' test.txt # 输出全部文本awk '$2 ~ /th/ {print $0}' test.txt # ~ 表示模式开始。// 中是模式awk '$2 !~ /th/...
2018-05-17 18:01:53 289
原创 go-torch 简单使用
go-torch安装FlameGraph:git clone https://github.com/brendangregg/FlameGraph.git将FlameGraph/flamegraph.pl 加入环境变量$PATHflamegraph.pl -h 测试安装go-torch: 1. go get -v github.com/uber/go-torch修改代码:...
2018-05-17 17:07:22 4315
转载 golang unsafe point
package mainimport ( "fmt" "unsafe")type Entity struct { a byte b byte}func main() { entity := Entity{} fmt.Println(entity) p := unsafe.Pointer(&entity) // 转换成...
2018-05-17 15:34:58 449
原创 golang slice 源码分析
slice 结构定义type slice struct { array unsafe.Pointer len int cap int}创建slice// maxSliceCap returns the maximum capacity for a slice.func maxSliceCap(elemsize uintptr) uintptr...
2018-05-17 14:52:38 1419
原创 redis 持久化、过期策略和淘汰逐出策略
redis 目前支持的持久化方式快照方式: 1. SAVE 模式:保存快照的同时,会停止redis服务,直到快照落地,才会重新开始提供服务。 2. BGSAVE 模式:使用fork的方式拷贝redis内存,fork的同时会导致服务停止,但是间隔比较短,拷贝完内存后,redis重新提供服务,将内存数据落地,因为涉及到内存的拷贝,要求系统拥有和redis占用内存相同大小的空闲内存。快照缺点...
2018-05-17 11:09:04 530
原创 阻塞非阻塞、同步异步,select、poll和epoll总结
参考文章IO模型阻塞IO非阻塞IOIO多路复用信号驱动IO异步IO其中前4种是同步,第5种是异步在进行网络IO的时候会涉及用户态和内核态,数据会在用户态和内核态发生交换。 整个过程可以分为:用户态等待内核态数据准备好(这个决定是否阻塞和非阻塞)将数据从内核态拷贝到用户态(这个决定同步和异步)阻塞IO: 1. 用户态等待内核态数据可读(阻塞) 2...
2018-05-13 21:55:55 1779 1
原创 腾讯社招笔试加面试
笔试(每题40分钟,不能调试!!!):输出:输入n,输出方阵,n=5时如下0 0 0 0 5 0 0 0 6 4 0 0 7 14 30 8 15 13 29 10 11 12 1n=3时如下0 0 30 4 25 6 1始终调不对,望大佬解决,留下评论。...
2018-05-12 21:40:08 7832 3
原创 go pprof 简单使用
测试demopackage mainimport ( "flag" "fmt" "io/ioutil" "log" "net/http" _ "net/http/pprof" "sync" "time")func counter() { list := []in
2018-05-12 13:58:34 1074
原创 golang map 源码分析
源码分析// A header for a Go map.type hmap struct { // Note: the format of the Hmap is encoded in ../../cmd/internal/gc/reflect.go and // ../reflect/type.go. Don't change this structure witho...
2018-05-12 12:05:43 1439
原创 Mysql 乐观锁和悲观锁
乐观锁假定每次操作都不会产生冲突,一般使用cas进行解决。update xxx set num=num+1 where num = xxx and name = xxx悲观锁假定每次操作都会冲突,都需要加锁解决。select * for update结果集中的任何行数据使用排他锁或共享锁,否则申请会阻塞for update仅适用于InnoDB,且必须在事务块(...
2018-05-12 10:40:55 246
原创 Mysql redo、undo、bin、relay log 区别
redo log 和 undo logundo log:为了实现事务原子性,要么全部完成commit,要么全部回滚rollback,Innodb用于实现mvcc(多版本并发控制)例如:将user=’A’ 改为 user=’B’,则undo log中会记录下user=’A’和事务版本等信息一旦事务完成,所有修改必须被记录下,保证数据一致性(后面redo log解释)redo lo...
2018-05-11 17:28:05 12707 2
原创 python 内存管理和垃圾回收
内存池管理一切皆为引用(动态语言)常量和短字符串会缓存底层通过c的malloc和free进行内存分配和释放(对象大小大于256会在此分配),每一次malloc会分配256k如果请求分配的内存在1~256字节之间就使用自己的内存管理系统简单的python对象,例如数值、字符串、元组,采用的是深拷贝复杂python对象,dict、list等,浅拷贝回收不会立即free参考链接...
2018-05-11 13:31:09 244
原创 golang 内存管理 + 垃圾回收
tmcalloc参考链接 分配内存策略:全局缓存堆 + 进程私有缓存对于小容量的内存申请,优先尝试进程私有缓存,若私有缓存不足,则向全局缓存申请。对于大容量的内存申请,直接向全局缓存申请。进程私有缓存:单链表数组,默认分配86个大小不同的块,每个块上的数组使用才初始化。全局缓存堆:单链表数组,一共会分配256个不同大小的块,1 page = 4k,链表对应数组每个元素page递增...
2018-05-11 12:21:26 5774
原创 Redis 集群方案学习
Twemproxyredis 请求先达到代理层,然后再代理层做路由规则以及请求分发和结果合并。 方案优点: 1. 路由分片逻辑下移,不依赖客户端代码,客户端可像连接redis一样连接proxy 2. proxy 连接 redis实例,减少redis承载的连接数 方案缺点: 1. 请求经过中间层,产生网络消耗。 2. 无法平滑增加redis实例Codiszook...
2018-05-09 22:20:38 171
原创 golang context 源码分析
context 使用背景一个request可能对应启动多个goroutine去执行任务,我们可以通过context,实现对这些goroutine的生命周期的控制。同时,对于这些goroutine通用的常量变量,context可以提供存储。使用demo不断产生数字,直到程序退出package mainimport ( "fmt" "context")fu...
2018-05-09 17:21:47 570
原创 golang 赋值拷贝问题
数组切片:func main() { m := make(map[string]interface{}, 0) l := make([]int64, 0) m["hello"] = l l = append(l,1) fmt.Println(m["hello"]) //[]}func main() { l := make([]int64, ...
2018-05-07 15:41:04 8989 1
原创 golang 面试题尝试解答
题目链接交替打印数字和字母package mainimport ( "fmt")func main() { var iout, cout, done = make(chan bool), make(chan bool, 1), make(chan bool,1) go func() { iarr := []string{"1", ...
2018-05-06 20:08:06 799
原创 golang WaitGroup 并发使用
题目原地址package mainimport ( "fmt" "sync" "time" "sync/atomic")const THREE_MINUTES = 3 * 60 * 1type BanTable struct { VisTable map[string]int64 Lock *sync.Mutex}fu...
2018-05-06 17:49:05 1160
原创 Hadoop 相关指标意义
Configured Capacity = 磁盘可用空间 - datanode保留不使用的空间(dfs.datanode.du.reserved - 有可能预留空间做其他操作例如map的shuffle,默认为0),异常将导致无法写入文件DFS Used = HDFS 已经使用空间DFS Remaining = HDFS 剩余空间Non DFS Used = Configured Capac...
2018-05-06 11:39:12 996
原创 hadoop 序列化压缩
hadoop 序列化和 Java 序列化的区别Java 序列化的特点:序列化的信息非常详细,包括类信息等,而这决定了Java序列化很占内存和并且并不高效(相对于hadoop序列化)。Java 序列化的时候在不断创建对象,对GC回收压力大Hadoop 序列化的特点: 1. 减少无用信息序列化 2. 序列化对象可重用 3. 自己实现序列化,可以更好控制扩展,例如proto、av...
2018-05-01 13:30:10 214
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人