golang interface 底层相关

interface 分两种空接口(eface)和非空接口(有方法定义的接口)type eface struct {_type *_type // 具体类型信息的指针 data unsafe.Pointer // 指向实际存储的数据}也就是定义了指向位置的指针和指向类型的指针。例子:var i interface{}i = 42_type 指向 int 的类型信息。data 存放

golang 组合和继承问题

今天面试的时候,面试问我golang 如何实现继承。我直接说golang中只有组合,想实现类似继承的效果的话。就是struct嵌套struct 这种比较靠谱

golang 对json中字段类型不固定的处理

用golang读取一个json,发现有一个字段的值有的是int类型,有的是string类型。解决思路就是自定义一个类型,然后解析json的时候,自定义函数进行判断。type StringOrInt stringfunc (s *StringOrInt) UnmarshalJSON(data []byte) error {// 尝试解析为字符串 var str string if err :=

ping 域名来查看网络情况

我们有时候想查看本地到域名的联通性的时候,就使用ping来操作。而ping属于icmp协议。这个协议主要是用来网络诊断和控制。其中网络联通用的是ping。而路由诊断就用的traceroute工具。它会记录从你本地到指定ip之间经过了那些路由节点,以及耗时。核心目的就是为了定位网络延迟和中断的具体位置。实现原理就是通过ip数据包的ttl(time to live)来实现。初始化ttl=1,发现一个路

你不需要辞掉你的工作来创造一些真正的东西

在独立黑客和创业圈里,流传着一种绝对妄想、有害的心态——认为你需要辞掉工作,“全力以赴”,在没有家具的公寓里吃方便面过“创始人模式”。操他妈的。你知道比项目时间有限更让人紧张的是什么吗?不知道房租怎么付。没有保险。看着你的银行账户不断流失,而你的MVP项目只有14个注册用户,却没有任何收入。这不是电影。你不是扎克伯格。你辞职并不能证明你的承诺——你只是在还没做出一个可用的产品之前就把你的安全网拿走

golang 实现qps 滑动窗口流量统计

思想就是用循环数组来实现整个结构。其中numSlots用来表示滑动窗口的持续时间,比如30s,间隔时间是1s执行一次,这个可以用goroutine起一个定时器实现。计数就用golang atmic 实现,这个具有原子性。每一次步进就是(curIndex+1)%numSlots 下边就是相关代码。package service import ( "fmt"

mysql 订单表索引的使用

面试的时候,面试官问了下边这个sql如何优化select * from order where date="xxx" and status=1主要是考察date和status建立联合索引,另外需要注意status 的区分度差。以及*的话可以用具体的字段来代替。这样好处是,如果所需字段和索引相同则可以命中索引,而不用去叶子节点再次查找数据。

如何寻找免费的梯子(vpn)

如果没有互联网基础的人,比如不知道zip到底是个什么东东的此类人。比较建议找找淘宝、咸鱼、小红书。其次就是访问github,输入vpn 相关关键词,挑选出一个合适的vpn。有非常多可以试用的。我个人比较推荐的是这个。一年200个g。https://tagss.pro/#/auth/fTzDKdNyps:这个地址有时候国内会打不开,有种达文西拿手电筒照手电筒的搞笑感。

微信小程序海报生成

轻松生成小程序分享海报jasondu41833 2018-08-23 ⋅ 4262 ⋅ 阅读6分钟小程序海报组件https://github.com/jasondu/wxa-plugin-canvas需求小程序分享到朋友圈只能使用小程序海报来实现,生成小程序码的方式有两种,一种是使用后端方式,一种是使用小程序自带的canvas生成;后端的方式开发难度大,由于生成图片耗用内存比较大对服务端

fastadmin 如何配置多个数据库

业务场景是这样的,同一个后台,要对接不同的项目,这样就需要对接多个数据库。首先指定到fastadmin/application/database.php目录下。指定配置文件。 'db_pinch' => [ 'type' => Env::get('database.type', 'mysql'), // 数据库类型

10进制转化为二进制

十进制转化为二进制就是取余的值,从右向左排序除 2 取余法例子: 用 4 除 2,记录余数:4÷2=2 余 0 用 2 除 2,记录余数:2÷2=1 余 0 用 1 除 2,记录余数:1÷2=0 余 1 获得值 100 ----------- 用 5 除 2,记录余数:5÷2=2 余1 用 2 除 2,记录余数:2÷2=1 余0 用 1 除 2,记录余数:2÷2=0 余1

goim 代码中 取模和位运算的区别

在goim ring代码中,有位运算&的操作。然后这就引发了一个疑问,为什么不用取模这是因为,在cpu层面,%不是一个便宜的操作,它通常被翻译成除法运算,而除法运算相对于其他运算是比较慢的。 idx := i % num 除法操作 通常比加/位运算慢一个数量级。所以就完全可以用下边代替,这个前提条件是num是2的幂(2, 4, 8, 16 …) idx := i & (num - 1)2 的