202003-17 2020 重学 Go 系列:08. 面向对象编程:结构体与继承 HOT 在之前学过的数据类型中,数组与切片,只能存储同一类型的变量。若要存储多个类型的变量,就需要用到结构体,它是将多个容易类型的命令变量组合在一起的聚合数据类型。 继续阅读 >
202003-17 2020 重学 Go 系列:09. 一篇文章理解 Go 里的函数 HOT 函数是基于功能或 逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。 继续阅读 >
202003-17 2020 重学 Go 系列:10. Go语言流程控制:if-else 条件语句 HOT Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 继续阅读 >
202003-16 Micro In Action(三):调用服务 HOT 本文讨论了如何调用一个已经存在服务。 micro 提供了丰富的工具, 可以用来在运行时查看服务状态及调用服务方法。这其中既有命令行工具, 也有基于 web 界面工具。 最后,我们创建了一个客户端项目,用代码真正完成了服务的调用。 继续阅读 >
202003-12 深入剖析ArrayList的底层源码-ArrayList 和 Vector 的区别 深入剖析ArrayList的底层源码-ArrayList 和 Vector 的区别 ArrayList 和 Vector 底层都是 数组 ArrayList 每次扩容的情况下扩容为原来的1.5 倍。线程不安全,当多个线程同时访问同一个ArrayList 集合时,如果两个或两个以上的线程修改了 ArrayList 集合,则必须手动保证该集合的同步性。 Vector 是同步类,其线程安全,但是它的访问比较慢。Vector 每次扩容为其空间大小的 2 倍。 继续阅读 >
202003-12 深入剖析ArrayList的底层源码-常用方法及其源码剖析 深入剖析ArrayList的底层源码-常用方法及其源码剖析 1. get()方法 get(int index)方法是返回集合中指定位置的元素。 继续阅读 >
202003-12 深入剖析ArrayList的底层源码-构造方法及其源码剖析 深入剖析ArrayList的底层源码-构造方法及其源码剖析 构造方法及其源码剖析 1. 带int类型的构造方法 源码剖析 继续阅读 >
202003-12 深入剖析ArrayList的底层源码-ArrayList介绍及其源码剖析 ArrayList是可调整大小的数组,实现了List接口。 实现所有可选列表操作,并允许所有元素包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于Vector,不同之处在于它是不同步的)。 继续阅读 >
202003-12 连存活到JDK8中著名的Bug都不知道,怎么敢给你加薪 SubClass 继承自BaseClass,由于SubClass数组中每一个元素都是SubClass对象,所以BaseClass[] baseArray = subArray;这种强制类型转换不会报错。这其实就是java对象的向上转型,子类数组转换成父类数组是允许的。但是由于数组中元素类型都是SubClass类型的,所以 baseArray[0] = new BaseClass();会报错java.lang.ArrayStoreException。这也就是说假如我们有1个Object[]数组,并不代表着我们可以将Object对象存进去,这取决于数组中元素实际的类型。 继续阅读 >
202003-12 python之路——初识面向对象 初识类和对象 字典就是一类数据结构,我一说字典你就知道是那个用{}表示,里面由k-v键值对的东西,它还具有一些增删改查的方法。但是我一说字典你能知道字典里具体存了哪些内容么?不能,所以我们说对于一个类来说,它具有相同的特征属性和方法。 继续阅读 >
202003-12 python之路——初识面向对象 类的相关知识 self:在实例化时自动将对象/实例本身传给__init__的第一个参数,你也可以给他起个别的名字,但是正常人都不会这么做。 因为你瞎改别人就不认识 继续阅读 >
202003-12 python之路——初识面向对象 面向过程 VS 面向对象 python之路——初识面向对象 面向过程 VS 面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西。 继续阅读 >
202003-12 python之路——初识面向对象 楔子 python之路——初识面向对象 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人拿棍打狗, 狗可以咬人,怎么描述这种不同的角色和他们的功能呢? 继续阅读 >
202003-12 python面试题37道,看完面试不愁了 python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不是“并行”。 多进程间共享数据,可以使用 multiprocessing.Value 和 multiprocessing.Array 继续阅读 >
202003-12 使用 Go 和 LLVM 进行 Web Assembly 的高效前端开发 HOT 总的来说,我很高兴在我的工具箱中再添加一个工具来更加简单方便的创建 Web assembly。也许通过一些工作,tinygo 可以生成的更简洁,并像 Rust 一样在网络的下一个技术平台上坚实可靠。 继续阅读 >
202003-12 一个零 GC 的缓存库:freecache HOT 今天给大家推荐一个零 GC 开销、高并发性能的缓存库:FreeCache,项目地址:https://github.com/coocood/freecache,Star 数:2.5k+。 继续阅读 >
202003-12 Micro In Action(一):入门 HOT 这个系列聊一聊 Micro, 我们将以实际开发微服务为主线,顺带解析相关功能。从最基本的话题开始,逐步转到高级特性。 Micro 很强大,掌握后使用起来也相当便利。但它的演进速度非常快, 导致其文档有严重缺失和滞后。 很多功能没有文档;很多基本问题不得不去 GitHub 上提 issue 或去 Slack 里面问,又得不到什么反馈。最后, 查看源码成了唯一的学习途径。这对于使用者来说非常不友好,阻碍了 Micro 被更多人所采用。 继续阅读 >
202003-12 “网红” WebAssembly 与 K8s 如何实现双剑合璧? HOT WebAssembly 技术已经走出浏览器,让计算无处不在。本文利用 containerd 的扩展机制,可以为 WebAssembly 应用提供与其他容器应用一致的、抽象的、应用分发、交付和运维模型,可以在 Kubernetes 集群中进行统一调度和管理。 继续阅读 >
202003-11 Golang源码系列四:Interface实现原理分析 HOT 接口是一种抽象类型,它没有暴露所含数据的布局或者内部结构,当然也没有哪些数据的基本操作,所提供的仅仅是一些方法。当你拿到一个接口类型的变量,你无从知道它是什么,但你能知道它能做什么,或者更精确地讲,仅仅是它提供了哪些方法。 继续阅读 >
202003-11 Golang源码系列三:Channel实现原理分析 HOT channel可以在两个或者多个goroutine之间传递消息。在Go中,goroutine和channel是并发编程的两大基石,goroutine用来执行并发任务,channel用来在goroutine之间来传递消息。 继续阅读 >
202003-11 Golang 源码系列二:Slice实现原理分析 HOT 众所周知,在golang中,slice(切片)是我们最常使用到的一种数据结构,是一种可变长度的数组,本篇文章我们主要结合源码来介绍一下slice的底层实现,以及在使用slice时的一些注意事项。 继续阅读 >
202003-11 Golang源码系列一:Map实现原理分析 HOT 每个map的底层结构是hmap,是有若干个结构为bmap的bucket组成的数组。每个bucket底层都采用链表结构。 继续阅读 >
202003-10 除了标准库 sync 包外,这个官方包(golang.org/x下的)你应该了解 HOT go 语言里使用 go 关键字就可以轻松搞定并发的问题,它讲究的是“不要通过共享内存来通信,而应该通过通信来共享内存”的原则,在 Go 里 channel 是个线程安全的多线程通讯介质。Go 本身的这些原语基本上可以解决常见的各种需求了。 继续阅读 >