自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (5)
  • 收藏
  • 关注

原创 用数学编程可以有多悠美

用判断两条线段是否相交解释程序中数学原理的重要性。

2023-06-17 11:11:17 193

原创 让业务代码更优雅的方法——类型工厂

最近碰到一个需求,用结构化数据结构(如JSON)构造一个表达式。已设计数据结构如下:// Value represents a value with given typetype Value struct { // type of this value: // number|string|boolean|object|array|expr Type string `json:"type"` Data json.RawMessage `json:"data"` // specific

2021-06-14 23:45:05 144

原创 重新认识Go的interface

实现了通用的JSON,YAML,XML相互转换的方法。Go interface是一种特殊的Go类型,不允许为该类型增加methodinterface{} 接收为赋值的 interface{}作为输入,得到的还是未赋值的interface{}<nil>interface{} 可赋值为 *interface,得到的是reflect.Ptr类型,只值为interface类型,可用于反序列化为任意的Go数据结构

2021-06-12 23:41:42 269

原创 不会做产品的程序不是好测试

不会做产品的程序不是好测试,不才当年设计的实习生自动过滤器,能考虑到5个以上得分点,直接录用。

2021-05-17 21:53:48 110

原创 一道笔试题展示的良苦用心——珍爱生命远离递归

通过一个递归增长速度远远大于斐波那契数列的笔试题目的代码优化效果,向读者展示一个核心编程思想:“珍爱生命,远离递归”。希望读者将“禁止使用一切形式递归纳入日常编程规范”。

2021-05-16 22:13:34 120

原创 在Go中用json序列化未知类型的巧妙方法

我们知道Go的json库可以方便的在json字符串和go类型之间相互转换。然而现实中经常遇到这样的需求,需要序列化的object类型是“未知”的,需要根据某个固定字段来判断用什么类型来序列化。如如下json数据表示animal数组的话,实际上所有的attr字段的具体类型是需要根据kind字段的值来确定的。这种数据表示在像javascript这样的动态语言表达起来很自然,但在go这样的静态类型语言里,描述起来就不是那么容易了。

2021-05-07 23:53:06 1393 6

原创 关于代码可读可维护问题的一些浅见

关于程序可读可维护问题的一些浅见,从在go语言中如何优雅的实现枚举映射,到理想编程语言的表达力及代码执行时机的一些思考。

2021-05-03 23:41:44 589 5

原创 像写诗一样撸代码是怎样的体验

关于容器空间扩容问题的精巧设计,实现过采用连续空间存储的序列式容器如vector,deque的同学都知道,由于需要在插入效率和动态扩容之间取得平衡,往往需要设计一个合理空间扩容策略,来满足大多数情况下的动态增长的需求且效率损失可控。

2021-05-01 23:03:06 260 2

原创 关于实时TopN排名算法的思考

关于实时TopN排名算法的思考0.引言1.TopN实时排名算法1.1 一个失败的方案1.2 现成的数据结构?1.3 合理的方案Reference0.引言实时排名是网络应用中常见的功能。根据需求不同,大概可以分为以下几类:i. TopN排名ii. 全数据排名作为通用需求,我们必须做如下假设:a. 用户基数较大b. 排名数据更新较频繁c. 用于排序的数据(score)范围不确定...

2018-11-21 20:49:38 3342 2

原创 golang中interface的一些语法缺陷的改进

GO语言有一个独门秘技:interface,是大师们对OOP的经典诠释,是对传统OOP思维的一个巧妙颠覆。既优雅地实现运行时多态,又不需要像C++那样显式申明,完美的解除了类型实现跟接口调用之间的耦合。Go语言的主要设计者之一Russ Cos曾经说过,如果只能选择一个Go语言的特性移植到其他语言中,他会选择接口。可见接口在GO中的地位,及其对GO这门语言所带来的活力。Russ Cos:...

2018-08-09 00:14:23 621

原创 一直被错爱的C/C++语法

最近在为dex-理想中的编程语言模型(https://github.com/dexlang/dex)整理一些资料发现C/C++的函数申明语法真的很奇怪:golang已经在官方blog详细说明为什么要改掉C的函数声明语法https://blog.golang.org/gos-declaration-syntax大意如下:C的函数声明语法:retType funcName(p...

2018-08-06 00:03:41 238

原创 Golang黑科技之——string与[]byte转换

我们知道,相对于C语言,golang是类型安全的语言。但是安全的代价就是性能的妥协。 下面我们通过Golang中的“黑科技”来一窥Golang不想让我们看到的“秘密”——string的底层数据。 通过reflect包,我们可以知道,在Golang底层,string和slice其实都是struct:type SliceHeader struct { Data uintptr Len

2016-10-27 00:09:19 37972

原创 论软件设计中的哲学观

所谓哲学,即跳出事物的表面现象,通过一些客观理性的分析,得出一些更接近事物本质的结论。从而以一种大世界的视角,来观察和解读这个世界。如道家所谓的“一”,佛家所云的“众生平等”。软件设计中的哲学观,即以一种“一”的视角,来评价和反思我们的设计,仅仅实现需求就是对的吗?第一次有人告诉我这个概念,是在大概10年前,我参加工作的第一个导师,一个偏执但让我很敬佩的华工怪才。当然那个时候初生牛犊,没有

2015-08-21 23:20:24 1783

原创 斐波拉契数列与黄金分割原理

斐波拉契数列是由兔子繁殖问题发现的神奇数列,由一个经典的递归定义:这个数列的前21项如下:1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946斐波拉契数列神奇的地方在于,数列的相邻项(或相同间隔的项)之间的比值趋于常数。如:这就是神奇的黄金分割比例0.618的由来。由斐波拉契数列的特性,我们尝试定义一个满足斐波拉契数列和等比数列的新数列如下:由以上定义可知:FG(n+2)=FG(n)gg=FG(n+1)+

2024-03-18 23:18:10 368

原创 Go语言编程规范

自定义Go编程规范

2021-05-17 21:19:18 395

原创 关于web分页展示功能的设计

分页展示功能是web中最常见的功能之一传统的api设计方法是把所有数据排序,并按pageSize分成若干段,根据传入参数page取对应的分段的数据乍一看,这个设计很传统,也很自然,没毛病但是仔细研究后,发现这种设计无论从性能还是人性化方面,都有毛病我们来考虑一个常用场景,新数据在不断加入,如分页展示一个论坛主题数据数据按时间戳排序,肯定是希望最新的数据在第一页展示,即新数据在列表头部不断加入按照传统设计,当数据集发生变化,则重新刷新页面,所有页面的数据都会发生变化,这就像从vecto

2020-12-30 22:44:57 345

原创 GO语言带调试日志的锁

死锁在多线程中经常遇到,有时候看代码很难发现问题,带调试日志的锁,准确记录锁的周期,等待时间,读写竞争情况,Lock、Unlock是否匹配,方便找出死锁发生的各种原因https://github.com/vipally/glab/blob/master/lab22/debug_lock.gopackage debuglockimport ( "bytes" "fmt" "runtime" "strconv" "sync" "sync/atomic" "time")const

2020-09-17 00:14:40 129

原创 【linux】VirtualBox下ubuntu系统静态桥接网络配置的各种坑

目录0.网络配置目标1.VirtualBox的四种网络连接方式2.桥接模式的各种坑2.1 桥接网络无法获取ipv4地址2.2 桥接网络可以获取ipv4地址,但是无法ping宿主机2.3 桥接网络可以ping通宿主机,但是无法ping通网关2.4桥接网络可以ping通网关和访问internet,但是内网ip是动态的2.5大功告成,为VM配置独立静态内网IP实现所有网络目标安装过程已在这篇博客分享https://blog.csdn.net/vipally/article/..

2020-07-02 19:39:56 904

原创 【linux】VirtualBox安装ubuntu虚拟机并且实现跟宿主机互相ping通和共享文件夹

目录1. 用默认配置创建虚拟机2. 安装过程3. 安装后配置3.1 将时区切换到北京时间3.2 让root用户可以登录并且可以用xshell远程登录3.3 安装unbuntu安装VBox Addon3.4 设置HOST-VM共享文件夹a.选择菜单 “设备/共享文件夹”b.选择菜单 “设备/共享粘贴板/双向”c.选择菜单 “设备/拖放/双向”d.虚拟机关机3.5 用“桥接模式”实现宿主机与VM网络互通a.virtualBox需要设置网络连接方式为 “桥接网.

2020-07-01 15:53:20 1122

原创 分享一种科学管理各种shell脚本的方法

后端管理经常会遇到各种脚本直接存放在服务器上甚至直接在服务器上修改的问题这样做既无法管理脚本修改历史,也没法实现批量部署的需求一个较好的方法是通过git管理这些脚本,没类脚本在自己独立的目录和分支下管理,部署的时候只需要在服务器上拉取对应的分支即可完成统一更新,非常方便...

2020-04-14 17:01:56 172

原创 不要使用有副作用的std.map.[]操作符

map的[]操作符包含隐性操作:当key不存在的时候,会默认执行insert操作这种隐性操作在大多数情况下是有害的。

2017-05-05 15:02:51 554

原创 慎用频繁小块内存申请,让程序健步如飞

最近碰到一个应用,为一块已经载入内存的Tab文件生成一个动态数组用于建立单元格数据索引表。当然这也算是C vs C++的一个典型例子吧。由于事先不知道Tab文件的行数和列数,无法预先生成动态数组。方案1:首先想到的是遍历整个文件,用一个临时map记录每个单元格的索引信息,并计算出表格的行数和列数。然后申请根据行数和列数申请一个合适大小的动态数组,并将临时map中的数据搬到动态数组中,这样只需要

2016-11-13 14:40:29 1997

原创 mysql数据库存储引擎让我崩溃了

好久没跟数据库死磕了,这次是真被数据库死磕了。 windows下没有任何问题,移植到linux下,老区没有任何异常情况,新区大量复制装备,后台工具运行期间,角色无法正常登陆,服务器显示运行状态良好。以前用得蛮好的工具,在新区数据库才40万数据带索引一条update语句要1分钟,而且update返回后,fetchdata操作终止,mysql返回2013(connetion lost)错误。 看到这

2016-11-13 14:34:10 655

原创 用float/double作为中转类型的“雷区”

由于lua用double作为number类型的底层数据中转类型。而实际应用中多以int类型作为函数调用的参数(特别是C实现的API)。因而,double/int/unsigend int之间的数值转换在接入lua的项目中应用十分广泛。实际项目发现,double/int/unsigend int之间的数值转换存在一个**严重且极容易被忽视的"雷区"**。

2016-11-13 13:55:05 2292

原创 Golang仿函数实现方法及效率测试

在C++ STL中,仿函数(functors)被大量用作改变算法的内在行为。 由于Golang不支持泛型,所以没法像C++那样灵活的使用仿函数。但是Golang有interface,函数是”一等公民”(可赋值给指定类型变量),因此,在Golang中实际上也可以像仿函数那样,通过具有相同参数和返回值的方法声明的不同对象,实现行为的差异化。 下面,详细讲述,Golang中的实现方法: 以下通过不同

2016-10-30 22:35:38 1418

原创 基于环形缓冲区的deque实现方法

众所周知,C++ STL中有一个叫做deque的容器,实现的是双端队列数据结构,这种队列允许同时从队列的首部和尾部插入和删除数据。 然而在STL中这种数据结构是用”分段连续”的物理结构实现的(可以参考侯捷老师的《STL源码剖析》)。网上分析STL中这种容器的文章很多,如: http://blog.csdn.net/baidu_28312631/article/details/48000123

2016-10-20 00:50:50 1837

原创 不要让递归函数fuck大家的cpu

递归算法是大学计算机课程里面经常会讲到的编程方法,因为采用这种方法写出来 的代码清晰易懂。但是,在大多数编程规范里面,会严令禁止使用递归函数,原因下面来详细说明。首先,由于逻辑错误,由直接或间接递归,造成递归调用无法结束(死递归),最后肯定会收到一个"stack overflow"的宕机信息。就暂且不论了。下面要详细讨论的是,简单的递归代码是如何fuck计算机运行时系统的。这里用计算Fibonacc

2016-10-13 22:50:30 2203

原创 installgithub-支持断点续传下载GitHubDesktop离线安装文件

用GitHub账号提交代码的都希望下载本地客户端克隆仓库https://desktop.github.com/可是在天朝用GitHub.exe在线下载安装这个客户端实在是太难了由于不支持断点续传 公司千M光纤外带翻墙都无法成功下载这个玩意于是写了一个工具,下载GitHubDesktop代码在这里欢迎拍砖https://github.com/vipally/insta

2016-08-26 09:33:08 3862 1

原创 cmdline-扩展golang std.flag

基于golang 1.6.2 flag 源码做了一个扩展 使命令行帮助信息更完整更清晰,更易于使用 源码地址: http://github.com/vipally/cmdline//Ally([email protected]) modify from std.flag version 1.6.2 //1. Add LogicName and Required field for every

2016-08-16 23:13:51 597

原创 linux下用gdb实现程序宕机时自动打印调用堆栈

linux下程序运行几天莫名其妙宕机了,不能还原现场,找到宕机原因就很无语了。一个解决办法是使用core文件,但是对于大型服务器文件,动辄几百M的core文件是在有点伤不起,于是想到程序宕机时自动打印调用堆栈。简单实用。废话不多说,直接上方案:方案1:使用gdb指令列表文件启动程序并监控之启动指令 gdb -x gdb_start.ini以下是gdb_start.ini文件内容:

2014-11-09 19:55:57 2288

原创 [golang]让golang支持泛型编程的一种方案

本博客原创博文版权所有 @[email protected]仅供交流学习使用用于商业用途请联系原作者 转载请注明出处:http://blog.sina.com.cn/ally2014总所周知,golang现在不支持泛型编程,对于习惯了C++泛型编程思想的程序员来说无疑是一个硬伤。虽然golang interface{}多少可以满足一些泛型需求,但是无论在效率和编程手法上,都

2014-11-09 19:55:54 3078

原创 [golang]golang reflect详细用法整理

本博客原创博文版权所有 @[email protected]仅供交流学习使用用于商业用途请联系原作者 转载请注明出处:http://blog.sina.com.cn/ally2014 最近在尝试用Go写一些东西,发现Go不支持泛型确实是一件比较蛋疼的事,同样功能的一个类,只有底层数据结构有一点点差异,需要实现N遍。特别像我这种在C++世界挣扎也纠结了很多年,用惯了模板编程思想

2014-11-09 19:55:51 16022

转载 golang的初始化顺序

Init每个包都可以定义一个或多个init函数2(原型为 func init()),init函数在包初次被导入时调用,同一个包内的多个init函数的执行的顺序是不定的,而如果这个包又导入了其他的包,则级连调用,所有包import完成,所有init函数执行完后,则开始main的执行。而对于全局变量,以一个简单的例子来说明: // package p var gInt int… // p

2014-11-09 19:55:49 984

原创 [golang]从golang中的Slice和strin…

type SliceHeader struct { Data uintptr Len int Cap int}type StringHeader struct { Data uintptr Len int}以上数据结构来源于package reflect有

2014-11-09 19:55:46 376

转载 Golang反射调用函数

首先,来看看这段 PHP 代码:view sourceprint?1functionfoobar() {2    echo"Hello Golang\n";3}4$funcs= array(5    "foobar"=> "foobar",6    "hello" 

2014-11-09 19:55:44 1419

转载 golang中的defer panic使用方法

大家都知道golang里的panic相当于其他语言里的throw,而recover相当于其他语言里的cacth,可是由于golang的recover机制要求必须在defer的函数里才能执行catchpanic大概意思如下func protect(g func()) { defer func() {  log.Println("done")  //Println executes n

2014-11-09 19:55:41 714

转载 go deadlock

原文地址:deadlock">go deadlock作者:funkygao  1 package main  2   3 func main() {  4     ch:= make(chan int)  5     ch  6      7 }  上面的代码,在执行时会报:throw: all goroutines are asleep - deadlock!原因是

2014-11-09 19:55:39 462

原创 [Golang]golang中自动锁的实现

golang作为原生支持多线程的语言,为了实现线程安全的package,经常需要对全局变量自动加锁,以便安全的访问全局变量。废话不多说,直接上代码:package mainimport (     "sync" "fmt")type AutoLock struct {    obj interface{}    lock sy

2014-11-09 19:55:36 1272

原创 [Golang]如何在golang程序中自动获取编译时间的方法

在程序发布之后,经常需要识别程序的版本号,来确定一些问题是否因为程序未更新造成的,其中通过在程序启动日志中输出编译时间是最有效方法。在golang中没有C语言__FILE__,__LINE__,__DATE__,__TIME__这些好用的编译期常量给我们使用,好在golang提供了强大的cgo在go代码中嵌入C代码的方法,可以实现这个需求。废话不多说,直接上代码:package ma

2014-11-09 19:55:33 2308

原创 VisualSVN版本升级导致旧的版本库…

最近windows重装系统,将本地VistualSVN服务器的升级到2.5.6,将旧服务器数据迁移到新的服务器,迁移过程很简单,只是将旧SVN的Repository复制到新服务器,再将新服务器的SVN库指向该目录。客户端工作目录realocate到新的服务器地址,update和showlog没有问题,但是提交的时候出现如下错误:服务器发送了意外的返回值(500 Internal Serv

2014-11-09 19:55:31 2184

中科大-高级操作系统 01/15-第一章1-5节.ppt

中科大研究生课程-高级操作系统课件 主要讲分布式操作系统 01/15-第一章1-5节.ppt

2022-12-29

c++11FAQ中文版

cpp-11-faq.pdf c++11FAQ中文版 167页文字版带目录 需要的同学赶紧拿走

2018-07-04

github desktop 2016-9更新 3.3.1 (2/2)

github desktop 2016-9更新 3.3.1 (2/2)

2016-09-29

github desktop 2016-9更新 3.3.1 (1/2)

github desktop 2016-9更新 3.3.1 (1/2)

2016-09-29

GitHubDesktop_3_2_0_0_X64 (2/2)

目前最新版本的GitHubDesktop离线安装包 2/2

2016-08-25

GitHubDesktop_3_2_0_0_X64 (1/2)

目前最新版本的GitHubDesktop 1/2

2016-08-25

空空如也

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

TA关注的人

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