Go语言中文网 为您找到相关结果 438

工厂方法模式

一、模式的定义与特点 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子类工厂类中 工厂方法模式的主要优点 调用发只需要知道具体工厂的名称,无需知道产品的具体创建过程 增加新的产品时只需要添加具体产品类和对应的具体工厂类,无需对原工厂进行任何修改 二、模式的结构和实现 工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成 模式的实现 package FactoryMethod; public class AbstractFactoryTest { public static void main(String[] args) { try { Product a; AbstractFactory af; af=(A...阅读全文

博文 2019-05-14 00:34:52 简书帅气的昵称已被使用

金三银四背后,一个JAVA程序员的面试心得

回顾一下自己这段时间的经历,去年十二月份的时候,公司通知了裁员,我匆匆忙忙地出去面了几家,但最终都没有拿到offer,我感觉今年的寒冬有点冷。后续的面试过程我做了一些准备,基本都能走到hr面,后面我也顺利地拿到了offer,我给大家分享下我的求职体会,希望能给大家一些参考。​下面说一下自己面试过程遇到的一些具体题目和面试心得。阿里面试题​多个线程同时读写,读线程的数量远远大于写线程,你认为应该如何解决并发的问题?你会选择加什么样的锁?JAVA的AQS是否了解,它是干嘛的?除了synchronized关键字之外,你是怎么来保障线程安全的?Tomcat本身的参数你一般会怎么调整?你有没有用过Spring的AOP? 是用来干嘛的? 大概会怎么使用?如果一个接口有2个不同的实现, 那么怎么来Auto...阅读全文

博文 2019-03-26 12:31:43 a1127889067

设计模式之策略模式

策略模式 一个父类,有多个子类(出现了继承),需要添加一个是共有行为方法,但是并不是每个子类的实现都是同样的,且 有一部分是同样的。这种情况下如果使用继承的方式,有如下两种方法 方法的实现放在父类中,那么对于有些子类(与父类的实现不一致),就需要 override 父类方法。 这种方法的缺点是,有的子类需要 override 父类方法,而且有哪些子类漏掉了,编译无法发现,会出问题,不符合面向对象思想。 抽象方法放在父类中,让各个子类去实现。 编译器可以发现错误,不会存在漏掉的场景,但是每个子类都需要实现一遍此方法,代码没有复用,也不符合面向对象思想。 这种场景就应该采用策略模式,将此方法定义为接口,父类中使用此接口做为成员变量(组合),通过这个成员变量执行具体动作,子类实现的时候只需要根据自...阅读全文

博文 2020-04-07 00:32:42 上海大坤哥

golang new和make的区别

Go语言中new和make都是用来内存分配的原语(allocation primitives)。简单的说,new只分配内存,make用于slice,map,和channel的初始化。 new new(T)函数是一个分配内存的内建函数。 我们都知道,对于一个已经存在变量,可对其指针进行赋值。 示例 var p int var v *int v = &p *v = 11 fmt.Println(*v) 那么,如果不是已经存在的变量会如何呢?能对其直接赋值吗? 示例 var v *int *v = 8 fmt.Println(*v) 结果会报如下错误 panic: runtime error: invalid memory address or nil pointer dereference[si...阅读全文

博文 2019-04-24 09:34:41 guyan0319

Golang生成器模式

builder.go // builder package builder type VehicleProduct struct { Wheels int Seats int Structure string } type BuildProcess interface { SetWheels() BuildProcess SetSeats() BuildProcess SetStructure() BuildProcess GetVehicle() VehicleProduct } //MenufacturingDirector Begin type ManufacturingDiretcor struct { builder BuildProcess } func (f *Manufact...阅读全文

博文 2019-06-19 19:02:41 FredricZhu

Go:内存管理分配

![Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20191103-Go-Memory-Management-and-Allocation/cover.png) ℹ️ *这篇文章基于 Go 1.13。* 在内存从分配到回收的生命周期中,内存不再被使用的时候,标准库会自动执行 Go 的内存管理。虽然开发者不必操心这些细节,但是 Go 语言所做的底层管理经过了很好的优化,同时有很多有趣的概念。 ## 堆...阅读全文

设计模式-07-装饰者模式

装饰者模式 概述 当对象需要添加一些功能,比如在表单的组件添加验证功能,为咖啡添加配料,为窗口添加滚动条等等.此时如果使用继承的话,会产生很多子类,不好管理,而且,在项目越来越大的时候会出现类爆炸.使用装饰者模式,使用组合的形式构造对象,比使用继承更加灵活简单,也更加容易管理. 实现 此处实现为咖啡添加配料.有咖啡材料,现调制摩卡咖啡等.使用Beverage抽象类,咖啡和配料分别继承Beverage类,并实现里面的抽象方法Cost和GetDecription.配料的构造方法传入咖啡类,通过在配料的构造函数里组合配料与咖啡原料实现装饰者模式.每个配料(装饰者)都有(包装)一个组件,在装饰者里保存一个原料的引用就能实现咖啡被配料包(装饰)起来. 总结与分析 装饰者模式采用组合的构建方式,大大减少...阅读全文

博文 2019-04-11 10:34:44 疯狂的卡卡

leetcode刷题记录Array篇(26&27~Remove Element)

26.Remove Duplicates from Sorted Array 题目:Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length. Do not allocate extra space for another array, you must do this in place with constant memory. 翻译:给定一个排序好了的数组,删除重复的位置,使每个元素只显示一次并返回新的长度。不要为另一个数组分配额外的空间,您必须使用常量内存来进行此操作。 思路:就是去除数组中重复的数,不过要求...阅读全文

博文 2017-04-24 12:54:00 L千年老妖

Golang 中 slice cap 增长模式小记

h3l · 2020-01-13 00:43:30 在 Golang 中,我们知道数组是固定长度的。一般我们在使用时,大多数情况下使用的其实都是 slice,但是 slice 的底层的数据其实还是数组。所以我们在向 slice append 数据的时候,Golang 会检查底层的数组的长度是否已经不够,如果长度不够,Golang 则会新建一个数组,把原数组的数据拷贝过去,再将 slice 中的指向数组的指针指向新的数组。 但是,新数组的长度该如何确定呢?如果每次新数组长度只增加 1,那么每次 append 数据都需要新建一个数组。但是如果每次新增数组的长度太大的,又会造成内存的浪费。先写一个简单的代码看看内存如何增长。 package main import ( "fmt" ) func m...阅读全文

博文 2020-03-12 11:13:24 h3l.github.io

大话设计模式 -- Golang实现

DesignPattern Use GO language to achieve 23 design patterns 该项目是拜读《大话设计模式》后,学习Golang语言实现的,有很多不足之处,有待完善 有些模式是根据UML图编写的基本框架,有些是基于特定的环境下编写的实例 创建型模式 Abstract Factory抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类 Builder建造者模式:将一个复杂对象的构建与它表示分离,使得同样的构建过程可以创建不同的表示 Factory Method工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类 Prototype 原型模式:用原型实例指定创建对象的种类,并...阅读全文

博文 2019-03-27 21:35:24 Golang语言社区

区块链矿池的分配模式

### 作者介绍 JouyPub 技术经理 某互联网公司 ### 产生背景   当下各种以挖矿来获得收益的币种,随着时间的推移,挖矿的难度也越来越大,如果仍然靠单机去挖矿,几乎已经不可能了,所以就有矿池。例如按照当前的算力(20EH/s),一个20TH/s的矿机,挖到一个区块的时间为19年,也就是说如果单机挖矿需要19年才能获得奖励,这其中还不包括机器损耗、难度增大等因素,所以只有大家加入到一个矿池,共享自己的算力,爆块后,根据不同的分配模式,奖励再分配给个人。这种挖矿模式可以让个人的收益更加稳定,对于矿池而言,也会收取一些交易手续费。 顺便我们来算下现在挖矿多少天能回本。以蚂蚁矿机为例,每台的算力大概为20TH/s,功率1700W,成本取5000元,全网算力取20EH/s,当前爆块奖励为1...阅读全文

博文 2018-09-22 00:19:26 chongdongshequ

设计模式-04-职责链模式

职责链模式概述职责链模式是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。 实现使用数据过滤类来实现职责链模式。用户传递数据给FilterChain类,但是数据具体会被哪个过滤器处理客户并不知道,FilterChain最终会返回被过滤后的数据给用户。 总结与分析职责链模式让请求者和接收者解耦,从而可以动态地切换和组合接收者 代码实现:职责链模式(php/go...阅读全文

博文 2019-04-11 09:34:40 疯狂的卡卡

Spring MVC 浅谈

MVC这个词儿,最早的定义应该是作为一种软件架构设计模式出现在软工里面的,即使用model、view、controller 来设计及定义web软件的。 Spring MVC 是指Java 当前阶段最大的开源项目Spring 对于MVC 做出了具体的实现,叫做Spring MVC,作为Spring 的一个子集存在。顺道提一下Spring,现阶段的Spring 已经不再是当年那个Ioc、AOP、MVC的简单的“小”web框架了。看一下Spring 官网的一个图: 又差不多25个应用。覆盖的应用面已经达到了Java 服务器端开发的方方面面,几乎已经是Java 服务器端开发的规范。 image.png 回到MVC,MVC上文说到了不是Java 所特有的,它是一种软件架构的设计模式。 主要通过 1、拦...阅读全文

博文 2019-10-03 19:32:44 aside section ._1OhGeD

使用 delve 调试 golang 程序

安装 delve 官方的文档已经很全了,参考这里(github)安装。Mac OSX 比较麻烦,需要搞定证书。 断点和变量打印 delve 装好之后就可以直接在命令行使用 dlv 命令了。 查看可用的命令 dlv -h 看帮助信息可知:支持用 dlv attach 的方式调试正在运行的进程,支持 dlv connect 链接到网络端口调试。这里先用最简单的 dlv debug 调试。 dlv debug main.go 然后会进入调试模式,此时 help 可以看到支持的命令。 (dlv) b main.go:16 #在 main.go 的第 16 行设置断点。 (dlv) bp #查看当前所有断点 (dlv) c #运行到下一个断点或者程序结尾 (dlv) p a #打印变量 a 的值 (d...阅读全文

代码模板 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「模板模式」如何在真实业务场景中使用。 什么是「模板模式」? 抽象类里定义好算法的执行步骤和具体算法,以及可能发生变化的算法定义为抽象方法。不同的子类继承该抽象类,并实现父类的抽象方法。 模板模式的优势: 不变的算法被继承复用:不变的部分高度封装、复用。 变化的算法子类继承并具体实现:变化的部分子类只需要具体实现抽象的部分即可,方便扩展,且可无限扩展。 什么真实业务场景可以用「模板模式」? 满足如下要求的所有场景: 算...阅读全文

博文 2020-03-31 12:34:21 TIGERB

Go: GC 是怎样监听你的应用的?

![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/20191002-Go-How-Does-the-Garbage-Collector-Watch-Your-Application/1.png)

Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.

> 这篇文章是基于 Go 的 *1.13* 版本 Go 语言的垃圾收集器 (下文简称 GC )能够帮助到开发者,通过自动地释放掉一些程序中不再需要使用的内存。但...阅读全文

golang-interface{} 类型使用

interface{} 表示可以接纳所有的类型 未使用 interface{} 类型 package queue // 声明一个类型 Queue 类型,这个类型是用 []int 切片实现的 type Queue []int // 添加元素 func (q *Queue) Push(v int) { // 这里使用指针,才可以把数据真正的添加进去,共外部可用 *q = append(*q, v) } // 弹出顶层元素 func (q *Queue) Pop() int { // 获取最顶层元素 head := (*q)[0] // 把顶层元素剔除 *q = (*q)[1:] return head } // 判断是否有值, 是否为empty func (q *Queue) IsEmpty()...阅读全文

博文 2019-12-17 22:32:44 爱吃豆包

STL string与Go string

P.S. 这里不讨论COW(copy-on-write)和SSO(short-string-optimization) STL string(gcc 4.9.3) 通过源码可以发现,std::string继承与basic_string模板,而basic_string中仅包含_Alloc_hider _M_dataplus一个非静态变量,而_Alloc_hider仅包含一个指针,所以sizeof(string)可能会出乎你的意料。 class basic_string { //统计信息结构 struct _Rep_base { size_type _M_length; //长度 size_type _M_capacity; //能力 _Atomic_word _M_refcount; //引用...阅读全文

博文 2017-09-14 06:07:49 Love语鬼

一名十余年资深Java架构师的经验之谈

所谓架构师,思考的是全局的东西,是如何组织你的系统,以达到业务要求,性能要求,具备可扩展性(scalability),可拓展性(extendability),前后兼容性等。可能涉及到的东西包括了从硬件到软件的方方面面,实在是一言难尽。要想往架构师的方向发展首先要知道架构师是什么?架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。一个架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展,为目标客户提供更为全面的需求清单。 天马行空架构师在软件开发的整个过程中起着很重要的作用。说的详细一些,架构师就是确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”。架构师的主要任务不...阅读全文

博文 2019-03-29 20:34:41 杜弥

一名十余年资深Java架构师的经验之谈

所谓架构师,思考的是全局的东西,是如何组织你的系统,以达到业务要求,性能要求,具备可扩展性(scalability),可拓展性(extendability),前后兼容性等。可能涉及到的东西包括了从硬件到软件的方方面面,实在是一言难尽。要想往架构师的方向发展首先要知道架构师是什么?架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。一个架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展,为目标客户提供更为全面的需求清单。​天马行空架构师在软件开发的整个过程中起着很重要的作用。说的详细一些,架构师就是确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”。架构师的主要任务不...阅读全文

博文 2019-04-24 19:02:39 answer-A

Go设计模式实例:简单工厂

> > 该系列文章将用简单的例子来介绍Go语言设计模式的实现。 -------- 简单工厂模式定义 -------- * 工厂模式提供创建具体实例的功能,使用者无需关心其具体实现。 ---- 适用场景 ---- * 避免客户端知道内部的具体实现,只有工厂才能接触实现细节。返回的实例可以是接口、具体类型等。 ---- 简单实例 ---- * 利用工厂模式求几何图形的边长和面积。 package main import ( "fmt" "math" ) type GeometryType int const ( GeometryRect GeometryType = iota GeometryCicle ) type Geometry interface { Area () float32 Pe...阅读全文

设计模式-模板方法模式(Go语言描述)

这篇文章我们还是继续我们的设计模式系列, 今天我们带来的一个全新的设计模式在实际开发中大家肯定都遇到过, 可能大家只是不知道它叫模板方法模式而已, 今天我们就来详细的说一下什么是模板方法模式,已经该模式如何运用. 至于什么是模板方法模式, 我们还是老规矩, 先来个定义, 然后上张类图更加直观的看一下. 定义 模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤. 这个定义还是非常不错的, 至少认真读2遍还是可以理解什么意思的, 而且我们脑袋里可以想象到该如何设计这样的一个结构. 那它有什么样的使用场景呢? 其实在定义中已经说的很明白了, 大致有一下两点应用场景: 某些类别的算法中,实做了相同的方法,造成代码的...阅读全文

博文 2016-09-04 09:00:02 qibin0506

java实习生的技术要求有哪些?看看BAT对java实习生的要求

java实习生的技术要求有哪些?要进BAT有什么条件?下面就跟着千锋一起来看看吧! 对于实习生而言,其实很多公司要求都不是很高,毕竟对你的要求要对的起给你的工资水平,很多公司肯定都知道你本身的大体水平,不会期望太高,只是让你边学习边工作,如果你足够聪明伶俐,足够好学,可能就多培养你一些。 不过不同水平的公司(BAT>TMD>其他优秀的互联网公司>小型创业公司),肯定是对你的培养程度不同的,相应的对你实习的要求肯定是不同的。不要认为对你要求越高,得到的实习工资就会高,不是的,像腾讯阿里等公司对于实习生技术要求很高,但工资就在两三千左右,但以后的发展却是远远大于这个价值的。 一、BAT企业对实习生的要求(以阿里为代表): java基础非常重要,当然也要深入理解原理,什么JVM,JMM,Class...阅读全文

博文 2018-10-08 16:34:54 锋迷小小芊

优秀的程序员更重视阅读源码,不看源码那是假的

01从事java开发的都知道java有个垃圾回收机制Garbage collection,要准确理解Java的垃圾回收机制,我们可以从:“什么时候”,“对什么东西”,“做了什么事情”这三个方面来分析。01、“什么时候”“什么时候”即是GC触发的条件。GC触发的条件有两种:程序调用System.gc时可以触发;系统自身来决定GC触发的时机。系统判断GC触发的依据:根据Eden区和From Space区的内存大小来决定。当内存大小不足时,则会启动GC线程并停止应用线程。​新生代、老年代结构minor gc/full gc,还需要了解Minor GC 金额Full GC 触发条件Minor GC触发条件:当Eden区满时,触发Minor GC。Full GC触发条件:调用System.gc时,系统...阅读全文

博文 2018-10-11 16:06:01 Java007

如何把golang的Channel玩出async和await的feel

引言 如何优雅的同步化异步代码,一直以来都是各大编程语言致力于优化的点,记得最早是C# 5.0加入了async/await来简化TPL的多线程模型,后来Javascript的Promise也吸取这一语法糖,在ES 6中也加入了async和await. 那么,被大家一称赞并发性能好、异步模型独树一帜的golang,能否也有async和await呢? 其实,这对于golang的CSM来说一点也不难! 核心代码如下: done := make(chan struct{}) go func() { // do work asynchronously here // close(done) }() <-done 是不是很简单呢? go rountine负责async, channel的负责await,...阅读全文

博文 2020-02-10 23:32:45 海之方

golang 数据二 (切片)

在项目开发过程中,更多的场景是需要一个长度可以动态更新的数据存储结构,切片本身并非是动态数组或数组指针,他内部通过指针引用底层数组,并设定相关属性将数据读写操作限定在指定区域内。比如:/runtime/slice.go type slice struct { array unsafe.Pointer len int cap int }切片初始化切片有两种基本初始化方式:切片可以通过内置的make函数来初始化,初始化时len=cap,一般使用时省略cap参数,默认和len参数相同,在追加元素时,如果容量cap不足时,将按len的2倍动态扩容。通过数组来初始化切片,以开始和结束索引位置来确定最终所引用的数组片段。//make([]T, len, cap) //T是切片的数据的类型,len表示le...阅读全文

博文 2017-02-10 10:23:32 100018

设计模式-01-适配器模式

适配器模式概述在开发过程会遇到有两个项目,A项目想调用B项目的接口,然而两个项目并没有做兼容。适配器模式就将一个类的接口,转换成客户期望的另一个接口。适配器模式就好比IPhone手机的转换器一样。还有Javachoking的swing库也有很多Adapter也是适配器模式应用的场景。 结构适配器模式结构图 实现实现使用适配Log类。当Log实现了保存到文件的功能后,客户想实现保存到数据库,使用适配器模式可以实现。 总结与分析适配器模式的主要目的是组合两个不相干的类,在不改变原有系统的基础上,提供新的接口服务。 代码实现:适配器模式(php/go...阅读全文

博文 2019-04-10 20:34:39 疯狂的卡卡

型模式

一、原型模式的定义与特点 原型(Prototype)模式:用一个已经创建的实例作为原型,通过复制原型对象来创建一个和原型相同或相似的新对象 二、原型模式的结构与实现 模式的结构 抽象原型类: 规定了具体原型对象必须实现的接口 具体原型类:实现抽象原型类的clone()方法,它是可被复制的对象 访问类:使用具体原型类中的clone()方法来复制新的对象 模型的实现 原型模式的克隆分为浅克隆和深克隆 //具体原型类 class Realizetype implements Clineable { Realizetype() { System.out.println("具体原型创建成功!"); } public Object clone() throw CloneNotSuppportedExce...阅读全文

博文 2019-05-10 00:34:55 简书帅气的昵称已被使用

JAVA面试核心教程|Java面试基础知识点总结

Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? byte——1 byte——Byte short——2 bytes——Short int——4 bytes——Integer long——8 bytes——Long float——4 bytes——Float double——8 bytes——Double char——2 bytes——Character boolean——————Boolean boolean数据类型非true即false。 这个数据类型表示1 bit,但是它的大小并没有精确定义。 《Java虚拟机规范》中如是说:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语...阅读全文

博文 2018-08-28 21:52:10 Java_fenxiang

golang接口的使用(练习一)

在go语言中,一个类只要实现了接口要求的所有函数,我们就说这个类实现了这个接口。golang接口赋值实现方式一:将对象实例赋值给接口 package main import "fmt" //定义一个Animal接口,实现飞和跑的功能 type Animal interface { Fly() Run() } //定义一个Bird类 type Bird struct { } //通过类实现接口的函数功能 func (bird Bird) Fly() { fmt.Println("the bird is flying!!!") } func (bird Bird) Run() { fmt.Println("the bird is running!!!") } func main() { // 声...阅读全文

博文 2018-10-22 22:35:42 PowerMichael

想获取唯一ID?常见发号器、ID分配器方案对比介绍

发号器应具有的特性: 发号器作为一个独立的系统对外提供服务、满足高可用、高并发、弱依赖、不存在单点问题 服务自我监控与治理 现有系统接入成本低 ID具有唯一性:不能出现重复的ID号 趋势递增 实现方案目前常见的发号器实现方案如下1.UUID UUID(Universally Unique Identifier)的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的36个字符,示例:550e8400-e29b-41d4-a716-446655440000。 优点: 性能非常高:本地生成,没有网络消耗。 缺点: 不易于存储:UUID太长,16字节128位,通常以36长度的字符串表示,很多场景不适用。 信息不安全:基于MAC地址生成UUID的算法可能会造成MAC地址泄露,...阅读全文

博文 2020-04-14 17:33:39 Charles_Wong

Go:我应该用指针替代结构体的副本吗?

![logo](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-should-i-use-a-pointer-instead-of-a-copy-of-my-struct-44b43b104963/1_IO4bo74w6aX7rKC_spjmvw.png) 对于许多 `golang` 开发者来说,考虑到性能,最佳实践是系统地使用指针而非结构体副本。 我们将回顾两个用例,来理解使用指针而非结构体副本的影响。 ## 1. 数据分配密集型 让我们举一个简单的例子,说明何时要为使用值而共享结构体: ```go type S struct { a, b, c int64 d, e, f string g, h, i...阅读全文

博文 2019-07-08 21:46:07 polaris

Golang引用类型

引用类型包含 slice、map、channel 内置函数:new 为其分配零值内存 并返回指针 make 为其分配内存初始化结构 并返回对象 package main import ( "fmt" ) func main() { a := make([]int, 3) a[1] = 10 b := new([]int) b[1] = 20 //error : invalid operation: b[1] (type *[]int does not support indexing) ...阅读全文

博文 2016-09-07 07:00:03 lt695981642

工作总结

2010-2013 封装IOCP 内存池 使用CEGUI开发PC客户端UI 初识分布式 CS网络交互 单例、reactor、表驱动等设计模式 STL、模板 初识C# 初始多线程 版本管理 代码调试 xml 文件读写、配置解析 应用日志 sql 夯实C++基础,采用一些设计模式来更通顺的组织代码,以及会利用一些C++奇技淫巧来缩减代码,理解代码重构的意义。理解怎样用socket建立TCP连接来进行CS交互,以及通信中结构体的序列化和反序列化。对多线程安全有了初步的认知,了解互斥体、信号量和原子操作在多线程环境下怎样解决数据竞争。理解分布式架构下的数据同步、数据落地。熟悉游戏开发的总体流程。认识C#。 2013-2016 C#网络通信 Redis cocos2d-x、Unity Java/JNI...阅读全文

博文 2019-03-15 01:34:40 牧桐谣

golang pprof

基本路径:/debug/pprof/ 支持的分析类型: cpu(CPU Profiling): HOST/debug/pprof/block,查看导致阻塞同步的堆栈跟踪 goroutine:HOST/debug/pprof/heap,查看活动对象的内存分配情况 mutex(Mutex Profiling):HOST/debug/pprof/threadcreate,查看创建新OS线程的堆栈跟踪 启动 PProf 可视化界面 方法一: go tool pprof -http=:8080 cpu.prof 方法二: go tool pprof cpu.prof we...阅读全文

博文 2019-03-22 14:35:13 凯文不上班

采用interface实现的限时调用方法-博文

在实时性要求高的工程项目中,对于方法执行的时间有较高的要求,本示例程序,实现了一种安全的传入任意参数的方法限时调用工具类,能执行方法的最大容忍运行时间,保证服务不超时。//@description 超时运行方法,限制方法的运行时间 // 需要实现抽象接口AppRuning的Run方法 // 调用时TimeOutRun(timeout, fun, args...) // timeout超时时间(ms),fun实现Run()的回调方法,args...为方法调用参数列表 //@author chenbintao //@data 2017-03-20 19:00 初稿 // 2017-03-20 19:30 调试通过 package main import ( "log" "runtime/debu...阅读全文

博文 2017-05-05 04:43:19 hansegod

Go语言并发与并行学习笔记(三)

以下设计模式和应用场景来自Google IO上的关于Goroutine的PPT:https://talks.golang.org/2012/concurrency.slide 本文的示例代码在: https://github.com/hit9/Go-patterns-with-channel 生成器 在Python中我们可以使用yield关键字来让一个函数成为生成器,在Go中我们可以使用信道来制造生成器(一种lazy load类似的东西)。 当然我们的信道并不是简单的做阻塞主线的功能来使用的哦。 下面是一个制作自增整数生成器的例子,直到主线向信道索要数据,我们才添加数据到信道 func xrange() chan int{ // xrange用来生成自增的整数 var ch chan int...阅读全文

通过用Go编写shell小工具来实践设计模式

不久以前看过Rob Pike写的一篇文章(Self-referential functions and the design of options),对其中的提到关于如何配置结构体或者类成员属性的一种设计模式印象很深刻,其中的selft-referential更是魔幻但又不失实用性,看过细品,受益匪浅。他说为了为他正在编写的一个package(如果没猜错应该是net/rpc包)找到更合适的设计模式,他在几年间尝试了多种方案,最终选择了这种,为老前辈的这种精益求精的精神深深折服。巧合的是,前几天看了个开源项目,阅读其源码,发现英雄所见略同,也许是该作者也读了Rob的这篇文章,我不得而知,其中也用到了我们常说的“生产-消费”模式,这个项目不大,一千多行代码,实现的功能也是很简单,但作者代码的优雅...阅读全文

博文 2020-05-19 14:01:02 zhangwei

go数组、切片

数组 package main import "fmt" func main() { /*数组的声明 * 1、var ab [2]int 2、var bc 3、cd := [2]int{} [3]int{1, 2} [5]int{4: 1} [...]int{4: 1} [...]int{4, 1, 3} [...]int{0: 4, 1: 1, 2: 3} */ var a [2]string fmt.Println(a) var ab [2]int = [2]int{} fmt.Println(ab) var bc = [2]int{1, 2} fmt.Println(bc) c := [3]int{} fmt.Println(c) b := [3]int{1, 2} fmt.Print...阅读全文

博文 2016-11-09 11:00:03 u013210620

高效地使用字符串(Golang)

字符串是不可变字节(byte)序列,默认值是"",而不是nil。 使用 “`” 定义的原始字符串(raw strubg),支持跨行。字符串支持 !=、==、<、>、+、+= 操作符。允许以索引号访问字节数组,但不能获取元素地址。 使用 for 遍历字符串时,分 byte 和 rune 两种方式。 转换 修改字符串,需将其转换为可变类型([]byte 或 []rune),待完成后再转换回来。这个过程将重新分配内存,并复制数据。这个转换过程有一定的性能损失。要想获得更好的性能可以使用 “非安全” 的方式进行改善。 func bytesToString(bs []byte) string { return *(*string)(unsafe.Pointer(&bs)) } 亦可以用同样的方式将 s...阅读全文

博文 2017-08-03 12:34:55 勿以浮沙筑高台

golang 1.9 新特性预览:Logging, interfaces, and allocation

该文翻译自:http://commaok.xyz/post/interface-allocs/几个星期前,Peter Bourgon在golang-dev开了一个关于标准化日志记录的帖子。 日志很常用,因此性能很快提升。 go-kit日志包使用结构化日志,接口如下:typeLoggerinterface {Log(keyvals ...interface{}) error}调用代码:logger.Log("transport","HTTP","addr", addr,"msg","listening")请注意,进入日志调用的所有内容都将转换为interface{}。 这意味着它分配了不少内存。与另一个结构化日志库zap进行比较。 Zap为了避免内存分配和interface{}使用,导致了更丑...阅读全文

任职要求

UI设计师 职位详情 负责产品UI视觉设计与用户体验,能独立完成设计任务。 与团队合作,针对复杂抽象的问题设计清晰有效的解决方案。 准确理解产品需求和交互原型,设计出优质用户体验的界面效果图。 参与产品分析、创意以及交互体验优化,并提出建设性意见。 规范产品在用户体验上的统一性和一致性。 任职要求 本科及以上学历,设计类相关专业,2年以上的互联网或移动互联网设计经验。 有互联网公司工作经验,主导过上线项目。 精通各类交互与视觉设计,熟悉iOS、Android端的官方设计规范,同时是深度用户。 重视细节,追求像素级完美,热爱人机交互与用户洞察,对设计探索有浓厚兴趣,自我驱动力强。 具备一定的产品思维和较好的用户同理心,能够参与用户研究、交互设计、设计原型开发等工作。 后端开发工程师 职位详情 ...阅读全文

明白了,原来Go web框架中的中间件都是这样实现的

这篇文章想谈谈Go的装饰器模式、pipeline(filter)模式以及常见web框架中的中间件的实现方式。 修饰模式 修饰模式是常见的一种设计模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式。就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。 有时候我把它叫做洋葱模式,洋葱内部最嫩最核心的时原始对象,然后外面包了一层业务逻辑,然后还可以继续在外面包一层业务逻辑。 原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。与适配器模式不同,装饰器模式的修饰类必须和原来的类有相同的接口。它是在运行时动态的增加对象的...阅读全文

博文 2019-08-31 14:16:31 smallnest

图解Golang的内存分配

一般程序的内存分配 在讲Golang的内存分配之前,让我们先来看看一般程序的内存分布情况: image 以上是程序内存的逻辑分类情况。 我们再来看看一般程序的内存的真实(真实逻辑)图: image Go的内存分配核心思想 Go是内置运行时的编程语言(runtime),像这种内置运行时的编程语言通常会抛弃传统的内存分配方式,改为自己管理。这样可以完成类似预分配、内存池等操作,以避开系统调用带来的性能问题,防止每次分配内存都需要系统调用。 Go的内存分配的核心思想可以分为以下几点: 每次从操作系统申请一大块儿的内存,由Go来对这块儿内存做分配,减少系统调用 内存分配算法采用Google的TCMalloc算法。算法比较复杂,究其原理可自行查阅。其核心思想就是把内存切分的非常的细小,分为多级管理,以...阅读全文

博文 2019-06-09 23:02:47 RyuGou

【轻知识】有以下资料。面试是否不愁呢?

为何写这篇文章。因为搜面试题搜到一篇# PHP高级工程师面试题 。看了看,有的会有的不会。想到自己也或多或少看过一些资料,故整理一下。 以下表中,资料列,列出的就够了。大都足以回答上面的面试题中的问题。 技能 资料 思考 php内核篇 《PHP7内核剖析》《PHP 7底层设计与源码实现》《PHP 7底层设计与源码实现》视频 尽量看细点。php7较之php5怎么节省内存的。比如php7 zvalue中复杂类型的用指针操作,也就是存个指针。php7快在哪里,小到string用了柔性数组,大到ast吧。这些话是我面试后的反思。我当时只是回答结构体设计不同。 php框架篇 《深入 Laravel 核心 》《BAT资深工程师由浅入深分析Tp5&Tp6底层源码》 自己用啥框架就找啥吧。 设计模式篇 《大...阅读全文

博文 2020-02-27 16:32:54 言十年

Golang设计模式,装饰器模式

package decorator import ( "errors" "fmt" ) type IngredientAdder interface { AddIngredient() (string, error) } type PizzaDecorator struct { Ingredient IngredientAdder } func (p *PizzaDecorator) AddIngredient() (string, error) { return "Pizza with the following ingredients:", nil } type Meat struct { Ingredient IngredientAdder } func (m *Meat) AddIn...阅读全文

博文 2019-09-26 14:33:07 aside section ._1OhGeD

Golang设计模式,组合模式

两个例子,一个组合运动员,一个树。 package composite // region start composite swimmer demo type ITrainer interface { Train() } type ISwimmer interface { Swim() } type CompositeSwimmer struct { ITrainer ISwimmer } type Athlete struct{} func (a *Athlete) Train() { println("Training") } type Swimmer struct{} func (b *Swimmer) Swim() { println("Swimming") } // endregi...阅读全文

博文 2019-09-26 14:33:05 aside section ._1OhGeD

Go单例模式

单例模式回顾 以前在做java的时候,经常会用到设计模式,如单例模式、工厂模式、观察者模式等。其实设计模式和语言无关,先简单回顾下单例模式吧,单例模式是一种用在特定场景的设计模式。比如,读取程序的配置文件的时候就会用到单例模式。 想象一下,假如有个类的实例是来对配置文件进行操作,如果不用单例模式,系统中任何用到读取配置文件的地方都将会创建一个对象,这得多么浪费内存。 实际上改对象只需要被实例化一次即可。单例模式的抽象表达就是:在程序中我们只需要某个类实例化一次即可,保证一个类仅有一个实例,并提供一个获取实例的方法。 单例模式的实现 单例模式有懒汉式和饿汉式。在用Go实现之前,先看看Java的实现。在java中不管是懒汉式还是饿汉式都会将构造方法私有化。这点不用解释,因为不需要通过外部来实例化...阅读全文

博文 2019-03-04 00:34:40 nobody

Golang设计模式(工厂方法模式)

工厂方法模式类图, image.png abstract_factory_test.go // abstract_factory_test package abstract_factory import ( "testing" ) func TestMotorbikeFactory(t *testing.T) { motobikeF, err := GetVehicleFactory(MotobikeFactoryType) if err != nil { t.Fatal("Create motorbike vehicle factory failed") } vehicle, err := motobikeF.GetVehicle(SportMotorbikeType) if err !=...阅读全文

Go单例模式

单例模式回顾 以前在做java的时候,经常会用到设计模式,如单例模式、工厂模式、观察者模式等。其实设计模式和语言无关,先简单回顾下单例模式吧,单例模式是一种用在特定场景的设计模式。比如,读取程序的配置文件的时候就会用到单列模式。 想象一下,假入有个类的实例是来对配置文件进行操作,如果不用单例模式,系统中任何用到读取配置文件的地方都将会创建一个对象,这得多么浪费内存。 实际上该对象只需要被实例化一次即可。单例模式的抽象表达就是:在程序中我们只需要某个类实例化一次即可,保证一个类仅有一个实例,并提供一个获取实例的方法。 单例模式的实现 单例模式有懒汉式和饿汉式。在用Go实现之前,先看看Java的实现。 在java中不管是懒汉式还是饿汉式都会将构造方法私有化。这点不用解释,因为不需要通过外部来实例...阅读全文

博文 2019-03-04 01:34:40 zhoushuime