Go指针篇
前言 与 Java 和 .NET 等编程语言不同,Go语言为程序员提供了控制数据结构指针的能力,但是,并不能进行指针运算。Go语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这对于构建运行良好的系统是非常重要的。指针对于性能的影响不言而喻,如果你想要做系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。 概念 指针(pointer)在Go语言中可以被拆分为两个核心概念: 类型指针,允许对这个指针类型的数据进行修改,传递数据可以直接使用指针,而无须拷贝数据,类型指针不能进行偏移和运算。 切片,由指向起始元素的原始指针、元素数量和容量组成。 受益于这样的约束和拆分,Go语言的指针类型变量即拥有指针高效访问的特点,又不会发生指针偏移,从而避免了非法修改关键性数据的问题。同时,垃圾回收也比较容易对不会发生偏移的指针进行检索和回收。 切片比原始指针具备更强大的特性,而且更为安全。切片在发生越界时,运行时会报出宕机,并打出堆栈,而原始指针只会崩溃。 要明白指针,需要知道几个概念:指针地址、指针类型和指针取值 认识指针地址和指针类型 一个指针变量可以指向...
concat以及group_concat
concat()函数 1.功能:将多个字符串连成一个字符串。 2.语法:concat(str1,str2,…)返回结果为连接参数产生的字符串,如果有任何一个参数为NULL,则返回值为NULL。这边测试null,空白都没有效果,只有NULL有效。 3.举例: id 姓 名 1 林 晓明 1select concat(id,first_name,last_name) as info from business_account_info where id=1 结果:1林晓明 添加分隔符 1select concat(id,".",first_name," ",last_name) as info from business_account_info where id=1 结果:1.林 晓明 concat_ws()函数 concat函数的分隔符虽然多样,但需要一个一个填。如果是分隔符众多且都一致的情况下就显得很麻烦了。函数concat_ws完美解决。 1select concat_ws(",",id,...
关于学习的一些思考
今天看了一篇文章,关于如何学习技术的一点感悟 ,感到受益匪浅。 文章的内容主要分为两部分,对技术的学习,一是要战略上藐视技术,二是要战术上重视技术。 第一点很好理解,很多问题并不是这么难,但惧怕可以让它可怕百倍。对于这个问题,我的理解是,有些技术点确实比较复杂,甚至短期之内无法掌握,因此很多人就会惧怕,内心的抵制它。这大概也是这个时代的产物,功利性极强的表现。因此,只有战略上藐视技术,才能让你敢于学习技术,面对技术。但现实其实并没有改变,所以拆分化很重要,将大问题拆成一个个小问题。然后,再一个个问题解决,到后面就会水到渠成。 第二点其实是很多会忽略的,文中的举例很生动, 12345678910111. 老张把水壶放到火上,立等水开。(同步阻塞)2. 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)3. 老张把响水壶放到火上,立等水开。(异步阻塞)4. 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)这就是他们的区别,没那么高深,一个例子就能解释透彻!在我看来呢,这个就属于典型的在战略上做到了藐视了技术,但在战术上...
因选秀而引发的思考
虽然,算不上饭圈。但近两年的火爆男女团选秀也是跟着浪潮看了几期。 最近,刷微博热搜,看到连淮伟参加了”青你3”,初舞台获得C。普及一下,他在”青你1”获得第10名,然后前9名出道。换个说法,当年考985大学遗憾落榜但进入一所不错211大学的学长,在大学一年并没有荒废的情况下,心有不甘又回去准备高考了,结果第一场考试成绩只能上二本。 现实生活中会不会有这样的事情,掉到二本极难,但再次落榜不无可能。因为变数太多了,而想争夺的位置太前了。而人生也是如此,没有高考的限定,但人生的考试难道就可以无限期拖延么?不能的,大学毕业后你才是个出入社会的菜鸟。当你刚站稳脚跟,准备展望一切的时候… 30岁的大门已经在向你挥手了,然后是35岁,40岁一个接一个严峻的课题。抛开那些自带bgm的人外,好像确实没有沾沾自喜的时间,无论你拿到了哪些成就,只要还处于平凡的阶段。即使你想拖住一切,但周围的环境会不断影响你。同化独特性好像是人们很喜欢的一件事情,除非这个独特性开始让人仰望,这时候人们才会膜拜。 现在的社会太浮躁了,谁都想一蹴而就。24岁毕业的大学生,初入社会摸爬滚打个3~4年开始立足,这或许才是常...
推荐一款画流程图工具
现在市面上的流程图画图工具很多,包括线上的也很多,这里不做比较,仅推荐自己感觉不错的一款免费工具(并非广告)。 Processon 喜欢的小伙伴赶紧去试试吧~ 1最后记录一下特殊密码:晴朗 md5 qq+x
哈希算法
为什么开启这一篇呢?因为后面要对gopush进行讲解。 一致性哈希算法(图片网上资源,联系可删,描述均为自己观点) 0~2^32-1 可以理解为一个圆的外环均匀分布为2^32个点 => key 在圆上分布均匀分布4个节点(node) 查找方式 删除节点影响 添加节点影响 节点少的影响 虚拟节点 哈希函数定义:记录的存储位置 = f(关键字) 第一代:SHA-1(1993),MD5(1992),CRC(1975),Lookup3(2006)第二代:MurmurHash(2008)第三代:CityHash,SpookyHash(2011) 通过key获取comet-node节点MurmurHash 是一种非加密型哈希函数,适用于一般的哈希检索操作。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。 123456789101112131415161718// init consistent hashing circlefunc (k *Ketama) initCircle2(...
zookeeper选举和同步
前言Zookeeper 是一个分布式服务框架,主要是用来解决分布式应用中遇到的一些数据管理问题如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。 很多分布式中间件都利用zk来提供分布式一致性协调的特性。dubbo官方推荐使用zk作为注册中心,zk也是hadoop和Hbase的重要组件。其他知名的开源中间件中也都出现了zk的身影。 选举注意如果 Zookeeper 是单机部署是不需要选举的,集群模式下才需要选举。 选举四步骤: 个人能力 如何衡量 Zookeeper 节点个人能力?答案是靠数据是否够新,如果节点的数据越新就代表这个节点的个人能力越强,是不是感觉很奇怪,就是这么定的! 在 Zookeeper 中通常是以事务id(后面简称zxid)来标识数据的新旧程度(版本),节点最新的zxid越大代表这个节点的数据越新,也就代表这个节点能力越强。 zxid 的全称是 ZooKeeper Transaction Id,即 Zookeeper 事务id。 遇强改投 在集群选举开始时,节点首先认为自己是最强的(即数据是最新的),然后在选票上写上自己的名字(包...
zookeeper实战之服务注册与发现
在这一篇之前,建议先阅读zookeeper选举和同步.md,阅读清楚后,可以接着轻阅读Zookeeper工作原理(详细),然后开始本篇章。 参考文章: zookeeper实战之服务注册与发现 Zookeeper-服务注册与发现
zookeeper安装
安装【ZooKeeper Notes 2】ZooKeeper快速搭建 zookeeper-3.5.5安装报错:找不到或无法加载主类 org.apache.zookeeper.server.quorum.QuorumPeerMain-新版本zookeeper易犯错误 单机部署 安装jdk 地址:https://mirror.bjtu.edu.cn/reverse/apache-archive/zookeeper/zookeeper-3.7.0/ 拉取wget https://mirror.bjtu.edu.cn/reverse/apache-archive/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz --no-check-certificate 解压 tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz 修改名称mv apache-zookeeper-3.7.0-bin zookeeper-3.7.0 移动到你想的位置 mv zookeeper-3.7.0/ /usr/l...
swagger-部署-Mac
编辑(swagger-edit)安装一:安装node.js 二:安装http-server 1npm install -g http-server 三:下载 swagger-edit 1git clone https://github.com/swagger-api/swagger-editor.git 四:运行 12cd path/to/swagger-edit #就是进入到刚刚克隆的swagger-edit文件夹下http-servers swagger-editor 五:查看 12默认运行在8080 port在浏览器打开窗口 http://localhost:8080 显示部分(swagger-ui)一: 安装:下载 swagger-ui 二:创建一个文件夹用于swagger项目,然后初始化到节点 12cd path/to/swagger/projectnpm init 三: 然后你可以检查这里有一个package.json;*(npm init后出现package.json很正常)* 复制dist文件(swagger-ui里面的)到swagger项目;*(就...

