自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

wwhhff11

暂无

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

原创 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 1075

原创 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 172

原创 golang context 源码分析

context 使用背景一个request可能对应启动多个goroutine去执行任务,我们可以通过context,实现对这些goroutine的生命周期的控制。同时,对于这些goroutine通用的常量变量,context可以提供存储。使用demo不断产生数字,直到程序退出package mainimport ( "fmt" "context")fu...

2018-05-09 17:21:47 571

原创 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 1161

原创 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

原创 Java 阅读链接收藏

内存和GC 类加载 反射和RTTI JUC 线程

2018-05-05 13:00:31 132

原创 hadoop 序列化压缩

hadoop 序列化和 Java 序列化的区别Java 序列化的特点:序列化的信息非常详细,包括类信息等,而这决定了Java序列化很占内存和并且并不高效(相对于hadoop序列化)。Java 序列化的时候在不断创建对象,对GC回收压力大Hadoop 序列化的特点: 1. 减少无用信息序列化 2. 序列化对象可重用 3. 自己实现序列化,可以更好控制扩展,例如proto、av...

2018-05-01 13:30:10 215

原创 yarn 调度策略学习记录

yarn 调度器类型FIFO 先进先出调度器Capacity 容量调度器Fair 公平调度器FIFO 先进先出调度器特点:小任务容易阻塞,大任务会占用所有资源,不适合共享集群。Capacity 容量调度器特点:单独预留容量,保证小任务一提交就能马上启动,整体资源利用率不高,大作业执行时间要更长。容量调度器允许多个组织共享hadoop集群,每个组织被分配专门的队列...

2018-04-30 18:09:23 207

原创 golang nil、error 与interface 总结

interface{} 与nilgolang 的interface{}大体可以描述为两个元素(type+data),只有当type和data都为nil的时候 interface才会与nil相等。var v *Tvar i interface{}i = vv 为空指针,所以必定等于nil interface{},type和data都是nil,所以也为nil 但是 i=v后,i的...

2018-04-22 20:16:10 1240

原创 golang 常见知识点

题目链接:https://zhuanlan.zhihu.com/p/26972862defer顺序问题,后定义的先执行,panic在defer后面才会向上传递,输出:打印后,打印中,打印前,触发异常for range 迭代时会使用临时变量作为值拷贝,m保存临时变量的地址goroutine 执行会保存for的变量地址,而第一个for 循环i是值拷贝,所以输出全是10;第二个i作为gofun...

2018-04-22 15:03:15 356

原创 gin websocket 简单分布式实现

main.goimport ( "github.com/gin-gonic/gin")func main() { ... // 连接ws会先发Get,正常返回101 r.GET("/ws", func(c *gin.Context) { WsHandler(c.Writer, c.Request) }) ... ...

2018-03-18 15:55:09 8077

原创 golang 1.8 并发安全Map简单实现

type SafeMap struct { sync.RWMutex Map map[int64]string}func NewSafeMap(size int) *SafeMap { sm := new(SafeMap) sm.Map = make(map[int64]string, size) return sm}func (sm *Safe...

2018-03-18 15:47:44 2129

原创 gorm 简单调用源码分析

gorm 介绍:基于golang的orm框架,相关文档:http://doc.gorm.io/demo:package mainimport ( "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite")type Product struct { gorm.Model C...

2018-03-04 17:57:24 2964

原创 gin 协程并发导致服务停止

问题代码:func load(c *gin.Context){ go func(c *gin.Context){ c.GetString(....) }(c) go func(c *gin.Context){ c.Set(...) }(c)}导致服务偶发性停止,对外表现为某段时间,某台实例服务全部不可用。 查看日志: fatal

2018-01-03 10:07:20 5591 1

原创 Dubbo comsumer 远程调用流程分析

简单代码示例: <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 --> <dubbo:application name="demo-consumer"/> <!-- 使用multicast广播注册中心暴露发现服务地址 --> <dubbo:registry address="multicast://224.5.6.7:1234"/> <

2017-12-23 15:45:19 2003

原创 记录诡异的nginx请求500错误

线上总会是不是发现500请求,原因是发现了这样类似的请求:/xxx/yyy/zzz/?aaa=111&bbb=222&ccc错误原因: 在nginx中使用lua对几个参数进行非空校验,其中函数是:--检查字符串是否为空或nil,为空或nil时,返回truefunction _M.is_empty_str(self,value) return value == nil or string.

2017-12-22 00:22:17 5626 1

原创 postgresql 读书笔记

进程结构master 进程系统日志进程后台写进程:系统更新插入数据会先写到共享内存,然后再由此进程周期写入数据文件,提供IO效率预写式日志写进程:write ahead log 预写日志,是修改数据之前,必须把操作持久化到日志上,由此进程负责,wal日志可以被循环覆盖。归档进程:在wal日志被覆盖前,会先将其备份,由此进程负责。统计进程:统计相关数据。自动清理进程:在执行delete操

2017-12-02 16:26:04 341

原创 Dubbo Provider启动流程源码分析

简单的官方demo:provider的java代码:public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"META-INF/spring/dub

2017-11-25 19:14:06 2578

原创 golang 字典树 搜索+sugg 示例

package mainimport ( "fmt" "sort" "sync")type KeyWordKV map[int64]stringtype CharBeginKV map[string][]*KeyWordTreeNodetype PairList []Pairfunc (p PairList) Len() int { return l

2017-10-22 13:49:15 1269

原创 Gin 框架源码大体学习

Gin 服务框架服务端使用示例:package mainimport &amp;amp;amp;amp;amp;amp;amp;quot;github.com/gin-gonic/gin&amp;amp;amp;amp;amp;amp;amp;quot;func main(){ // 建立http路由 router := gin.Default() router.GET(&amp;amp;amp;amp;amp;amp;amp;quot;/gin/test/&

2017-10-21 10:58:05 4727

原创 golang 值传递和引用传递的总结

典型的引用传递类型:slice,map和channel: 典型的值传递类型:数组package mainimport "fmt"type Test struct { A int64 B string}func main(){ // 引用类型 map_param := make(map[int64]string,0) fmt.Println(map_para

2017-10-17 17:11:21 8063

原创 golang range 遍历

问题描述:遍历一个数组,修改其中的值:type MyTest struct { X int}arr := make([]MyTest,0,20)for k,v := range arr{ v.X = Y}期待输出,数组中所有的X均被修改成Y 实际输出,数组中所有的X均未发生改变问题分析在Go的for…range循环中,Go始终使用值拷贝的方式代替被遍历的元素本身,简单来说,就

2017-10-06 17:24:54 5992 1

原创 govendor 使用命令

常用命令:1. 生成vendor目录:govendor init2. 将外部依赖一同加入vendor中:govendor add +external3. 更新外部所有依赖:govendor update +external4. 更新指定外部依赖:govendor update $PACKAGE_NAME init Create the "vendor" folder and th

2017-10-06 17:12:44 2390

原创 Nginx 读书笔记

nginx http处理11个阶段 // 接收到完整的HTTP头部后处理阶段 NGX_HTTP_POST_READ_PHASE, // 将请求URI与location表达式匹配前,修改URI,即重定向阶段 NGX_HTTP_SERVER_REWRITE_PHASE, // 只能由ngx_http_core_module模块实现,用于根据请求URI寻找location

2017-10-03 16:27:22 389

原创 sqlalchemy 读写分离简单封装

源码#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/7/22 21:50# @Author : wanhongfei@bytedance.com# @Comment :# @File : db_util.py# @Software: PyCharmfrom sqlalchemy import creat

2017-07-23 18:39:02 3127 1

原创 AQS源码分析

AQS介绍AbstractQueuedSynchronizer,AQS是用来构建锁和同步器的框架,Java并发工具包中的可重入所、读写锁都是基于AQS的子类构建的,使用的是组合并发继承,因为对用户(开发者)而言,我们不需要关心底层线程的调度和控制。 * +------+ prev +-----+ +-----+ * head | | <---- |

2017-07-09 16:56:42 408

原创 tcc-transaction 执行流程源码分析

1.简单使用请参考如下链接: tcc-transaction demo 例程源码2.流程分析我们根据例程代码分析,可以猜测到事务的执行流程通过spring-aop实现。 ResourceCoordinatorAspect,主要为了完成confirm和cancel的执行,其执行级别为HIGHEST_PRECEDENCE + 1;:@Aspectpublic abstract class Reso

2017-07-08 16:22:50 3132

原创 python 线程、协程简单使用

python简单线程并发示例:import threadingimport timemutex = threading.Lock()def worker(num): time.sleep(1) mutex.acquire() print "this is ",num mutex.release()if __name__ == '__main__': for

2017-06-27 21:15:36 362

原创 Django object转json

def object2AttrDict(obj): res = {} for attr_name in dir(obj): try: attr = getattr(obj, attr_name) if callable(attr): # method con

2017-06-27 20:48:13 1770

原创 Spring 处理Post参数处理

常用表单提交类型:application/x-www-form-urlencoded 空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值multipart/form-data 不对字符进行编码,使用二进制数据传输,一般用于上传文件,非文本的数据传输。处理方式普通post表单 application/x-www-form-urlencoded 参考链接文件上传表单

2017-06-13 12:42:00 2121

原创 Python 对象知识实践

#!/usr/bin/python# -*- coding: UTF-8 -*-class People(object): hahaname = "abc" # 公开静态名称 _hahaage = 1 # 保护静态名称 __hahasex = "难" # 私有静态名称 # 构造函数 def __init__(self, name, age, sex):

2017-06-13 12:06:02 251

原创 简单跳跃表的实现

Java中的跳跃表Java API中提供了支持并发操作的跳跃表ConcurrentSkipListSet和ConcurrentSkipListMap。下面摘录”Java多线程(四)之ConcurrentSkipListMap深入分析“中的一些结论。 有序的情况下: 1. 在非多线程的情况下,应当尽量使用TreeMap(红黑树实现)。 2. 对于并发性相对较低的并行程序可以使用Collec

2017-05-10 18:29:52 584

原创 Tomcat 8005、8009和8080端口

远程停服务端口 其中8080为HTTP端口,8443为HTTPS端口 8009为AJP端口,APACHE能过AJP协议访问TOMCAT的8009端口。

2017-04-18 22:01:51 3008

空空如也

空空如也

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

TA关注的人

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