Gin 极速入门
认识 Gin 框架是一系列工具的集合,能让开发变的便捷。
学习框架的目的就是为了提供项目的开发效率,使我们更加专注业务,而不是和业务无关的底层代码。
Go 流行的 Web 框架 如果学习过其他语言,可能知道Java用的比较多的是Spring框架,PHP用的比较多的是Laravel,python用的多的是Django,都在各自的语言中具有强大的统治力。
Go 从诞生之初就带有浓重的开源属性,其原生库已经很强大,即使不依赖框架,也能进行高性能开发,又因为其语言并没有一定的设计标准,所以较为灵活,也就诞生了众多的框架,各具有特色,满足不同的喜好。
Gin 地址:https://github.com/gin-gonic/gin
号称最快的go语言web框架,目前是go官方的推荐框架(https://go.dev/doc/tutorial/)
iris 地址:https://github.com/kataras/iris
性能比gin高一些,支持MVC,但这款框架评价不太好,使 ...
实战-企业级抽奖系统
概述业务难点
抽奖的业务需求,既复杂又多变
奖品类型和概率设置
如何公平的抽奖,安全的发奖?
技术挑战
网络并发编程,数据读写的并发安全性问题
高效的抽奖和发奖,提高并发和性能
系统优化,怎么把Redis更好的利用起来
Go的优势
高并发,Go协程优于Php多进程、Java多线程模式
高性能,编译后的二进制优于Php解释型、Java虚拟机
高效网络模型,epoll优于Php的BIO、Java的NIO
抽奖一:年会抽奖代码1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889/*curl http://localhost:8080/curl --data "users=wenqiang,wenqiang2,wenqiang3" http://localhost:8080/import ...
lrzsz
简介 在开发及测试过程中,有时需要在测试机和本地进行文件的上传、下载。而使用Proxychains4、scp等命令时会出现不生效情况,可通过rz、sz进行文件传输。
安装 这里将介绍Mac上rz、sz的安装方法:
下载并安装 iTerm2 https://www.iterm2.com/#/section/downloads
下载并安装 lrzsz
brew install lrzsz
ln -s /usr/local/Cellar/lrzsz/{版本号}/bin/sz
ln -s /usr/local/Cellar/lrzsz/{版本号}/bin/rz
下载并安装automatic zmoderm for iTerm2
cd /usr/local/bin
下载文件: iterm2-recv-zmodem.sh、iterm2-send-zmodem.sh
sudo chmod 777 /usr/local/bin/iterm2-*
添加 iTerm2配置项
iTerm2 → Preferen ...
GORM 极速入门
基础概念 ORM(Object Relational Mapping),意思是对象关系映射。数据库会提供官方客户端驱动,但是需要自己处理 SQL 和结构体的转换。使用 ORM 框架让我们避免转换,写出一些无聊的冗余代码。理论上 ORM 框架可以让我们脱离 SQL,但实际上还是需要懂 SQL 才可以使用 ORM。
我本人是非常排斥使用 ORM 框架的,原因有两点。
不自由,我不能随心所欲的控制我的数据库。
性能差,比官方客户端驱动直接编写 SQL 的效率低 3-5 倍。
不过 ORM 也有很多优点,它可以在一定程度上让新手避免慢 SQL。也有一些文章讨论过 ORM 的利弊。比如这篇:ORM_is_an_antipattern。总的来说,是否使用 ORM 框架取决于一个项目的开发人员组织结构。
老手渴望自由,新手需要规则。世界上新手多,老手就要做出一些迁就。
gorm 是一款用 Golang 开发的 orm 框架,目前已经成为在 Golang Web 开发中最流行的 orm 框架之一。
除了 gorm,你 ...
8小时速成Golang+IM实战
引言学习前置要求
具备1种后端编程语言开发经验(C/C++/Java/Python/PHP等)
具备基本的网络编程能力和并发思想
了解计算机基本体系结构
了解Linux基础知识
学习提纲
Golang开发环境Go官网下载地址:https://golang.org/dl/
Go官方镜像站(推荐):https://golang.google.cn/dl/
根据自己系统,自行选择安装。
记得配置GOPROXY~
Go1.14版本之后,都推荐使用go mod模式来管理依赖了,也不再强制我们把代码必须写在GOPATH下面的src目录了,你可以在你电脑的任意位置编写go代码。
默认GoPROXY配置是:GOPROXY=https://proxy.golang.org,direct,由于国内访问不到 https://proxy.golang.org 所以我们需要换一个PROXY,这里推荐使用https://goproxy.io 或 https://goproxy.cn。
可以执行下面的命令修改GOPROXY:
1go env -w GOPROXY=https://goproxy.cn,direc ...
ClickHouse
入门篇ClickHouse 入门 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的**列式存储数据库(DBMS),使用 C++ 语言编写,主要用于在线分析处理查询(OLAP)**,能够使用 SQL 查询实时生成分析数据报告。
ClickHouse 的特点列式存储以下面的表为例:
id
name
age
1
张三
18
2
李四
22
3
王五
34
采用行式存储时,数据在磁盘上的组织结构为:
1
张三
18
2
李四
22
3
王五
34
好处是想查某个人所有的属性时,可以通过一次磁盘查找加顺序读取就可以。但是当想查所有人的年龄时,需要不停的查找,或者全表扫描才行,遍历的很多数据都是不需要的。
采用列式存储时,数据在磁盘上的组织结构为:
1
2
3
张三
李四
王五
18
22
34
这时想查所有人的年龄只需把年龄那一列拿出来就可以了。
列式储存的好处
对于列的聚合,计数,求和等统计操作原因优于行式存储。
由于某一列的数据类型都是相同的,针对于数据存储更容易进行数据压缩,每一列选择更优的数据压 ...
快手-后端-面试准备
ThreadlocalThreadLocal是Java中的一个类,它提供了一种线程局部变量的机制。它允许你在多线程环境中创建线程本地变量,这些变量的值只能在当前线程中访问和修改,不会对其他线程造成影响。
使用ThreadLocal,你可以在一个线程中创建一个对象,并通过ThreadLocal将这个对象与当前线程关联起来。之后,在同一个线程中,你可以通过ThreadLocal获取这个对象的值,并在需要的时候修改它,而不会影响其他线程。
ThreadLocal通常被用来解决多线程环境下的共享变量问题。在多线程环境中,共享变量的访问可能会导致竞态条件(race condition)和不一致性问题。通过使用ThreadLocal,你可以避免这些问题,因为每个线程都有自己的变量副本,不需要与其他线程共享。
需要注意的是,使用ThreadLocal可能会导致内存泄漏问题。如果你在使用ThreadLocal之后没有显式地清除其值,那么这个值将一直存在于内存中,直到线程结束或ThreadLocal被垃圾回收。为了避免内存泄漏,你应该在不需要使用ThreadLocal时手动清除其值,或者使用Java 8 ...
微众银行-测开
Collection概述
Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。
JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:Set和List)实现。
在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理;从 Java5 增加了泛型以后,Java 集合可以记住容器中对象的数据类型。
List接口概述
List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
JDK API中List接口的实现类常用的有:ArrayList、LinkedList 和 Vector。
List实现类: ArrayList
ArrayList 是 List 接口的典型实现类
本质上,ArrayList是对象引用的一个变长数组
ArrayList 是线程不安全的,而 Vector 是线程安全的,即使为保证 L ...
L03-算法编程技巧
如何快速且高效学习算法/刷题不刷过难的题见到新知识点—>学习(学思路,不是学代码)—>做模板题—>做带该知识点tag的简单题
力求精通,不要“差不多先生”
感觉自己可能没懂,一定要问,直到自己精通该知识点为止。
感觉可能懂了,也一定要自己去做一些题目验证一下是不是真懂了。
精通的判别标准:对于一个知识点,立刻能在脑海里形成代码,并迅速码出来。
练好debug的能力首先一定要自己尝试debug,哪怕实在调不出来了,问老师了,也一定要总结。
一是总结错误原因,争取下次不犯同样错误。
二是总结debug的方式,下次哪怕遇到类似的问题也能自己解决。 千万不要“这道题错了,找老师答疑,调过了就ok”
最佳状态是:遇到一个题,就算第一次提交没过,经过自己的debug找到错误的根源,然后调过了。这样的收益是远远大于通过答疑知道自己bug的收益。
笔试小技巧根据数据范围猜知识点一般1s时间限制的题目,时间复杂度能跑到1e8左右(python和java会少一些,所以建议大家使用c/c++做笔试题)。
n范围20以内:O(n*2^n) 状压搜索/dfs暴搜
n范围200以内 ...