- 博客(425)
- 收藏
- 关注
转载 互联网公司发员工期权靠谱吗?
知乎上一个提问和回答,post到这里参考一下~~Q:我到一个创业公司,老板说前300名员工有期权,给我们价格特别便宜,5分钱一股,给了我40万股,并且钱也不用现在交,只要在4年内哪天自己方便随时可交钱。老板告诉我们,我们的期权是很值钱的,公司将来一旦上市,这些期权每股将会有100元人民币以上的价格。说的我挺心动的,也就是我在4年内,可以随时用2万人民币买价值4000万人民币的公司股票。请问一下懂这个的大拿,这个真的靠谱么?A:兄弟,你这个期权激励方案,听起来不错。但我个人听起来有点扯淡,感觉老板忽悠的
2021-11-14 15:59:39 2506
原创 leetcode51. N 皇后
leetcode51. N 皇后八皇后n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存在两
2021-09-08 16:25:20 440
原创 负载均衡--Nginx, LVS
1.第一篇:负载均衡概述2.第二篇:LVS转发3. 补充解释7层和4层区别,以及为何在LVS下还要再加一层NginxPS1: 在做负载的时候,包是从底层到高层解析的!!也就是先解析第四层的四元组(源,目的地址的:ip,端口),这时还看不到7层应用层的数据(URI,不是URL,URL是用户端看到的,实际上在组装http报文的时候,已经通过URL前一部分的域名解析为ip地址了,URL后续部分是URI,也就是实际请求的资源地址)的信息,只有到第7层才会看到;所以 这种情况下,显然4层效率高(不用解析应用层)
2021-08-12 11:13:00 502
原创 Stream流式惰性计算
要求是编写一个能输出斐波拉契数列(Fibonacci)的LongStream:因为Java的范型不支持基本类型,所以我们无法用Stream<long>这样的类型,会发生编译错误。为了保存long,只能使用Stream<Long>,但这样会产生频繁的装箱、拆箱操作。为了提高效率,Java标准库提供了IntStream、LongStream和DoubleStream这三种使用基本类型的Stream,它们的使用方法和范型Stream没有大的区别public class Main {
2021-07-26 23:35:27 698 1
原创 对称加密、非对称加密算法,数字证书
对称加密:对称加密对称加密用的是同一个密钥来加密和解密,所以,密钥需要在网络中传输(A把密钥发给B),所以需要安全的密钥加密算法(数学理论保证可靠):密钥交换算法非对称加密:非对称加密...
2021-07-21 15:29:00 502
原创 异步IO、epoll、零拷贝
异步 IO 模型(AIO)是真正意义上的无阻塞的IO操作,但是目前只有windows支持AIO,linux内核暂时不支持。所以,理论上liinux的epoll尽管很猛,但是read的第二阶段:内核空间到用户空间还是阻塞的。参考:WX收藏夹:你管这叫IO多路复用...
2021-07-21 10:53:06 1782
转载 Guava EventBus 观察者(发布/订阅)模式
前言EventBus 是 Guava 的事件处理机制,是观察者模式(生产/消费模型)的一种实现。观察者模式在我们日常开发中使用非常广泛,例如在订单系统中,订单状态或者物流信息的变更会向用户发送APP推送、短信、通知卖家、买家等等;审批系统中,审批单的流程流转会通知发起审批用户、审批的领导等等。Observer模式也是 JDK 中自带就支持的,其在 1.0 版本就已经存在 Observer,不过随着 Java 版本的飞速升级,其使用方式一直没有变化,许多程序库提供了更加简单的实现,例如 Guava Ev
2021-07-14 15:10:43 365
原创 Servlet是什么?
我们平时说的Servlet看上去很神秘,其实本质很简单,先说结论: Servlet就是一个Java接口interface而已。那servlet是干嘛的?很简单,接口的作用是什么?规范呗!servlet接口定义的是一套处理网络请求的规范,所有实现servlet的类,都需要实现它那五个方法,其中最主要的是两个生命周期方法 init()和destroy(),还有一个处理请求的service(),也就是说,所有实现servlet接口的类,或者说,所有想要处理网络请求的类,都需要回答这三个问题:你初始
2021-06-29 14:00:56 186
原创 Spring自定义注解
转载自:Spring自定义注解前言自定义注解在开发中是一把利器,经常会被使用到。在上一篇文章中有提到了自定义校验注解的用法。 然而最近接到这样一个需求,主要是针对某些接口的返回数据需要进行一个加密操作。于是很自然的就想到了自定义注解+AOP去实现这样一个功能。但是对于自定义注解,只是停留在表面的使用,没有做到知其然,而知其所以然。所以这篇文章就是来了解自定义注解这把开发利器的。什么是自定义注解?官方定义An annotation is a form of metadata, that can
2021-06-28 22:05:50 5752
原创 Golang 内存分配与逃逸分析
参考:灵魂拷问:Go 语言这个变量到底分配到哪里了?来源于 公众号: 脑子进煎鱼了 ,作者陈煎鱼。我们在写代码的时候,有时候会想这个变量到底分配到哪里了?这时候可能会有人说,在栈上,在堆上。信我准没错…但从结果上来讲你还是一知半解,这可不行,万一被人懵了呢。今天我们一起来深挖下 Go 在这块的奥妙,自己动手丰衣足食!问题type User struct { ID int64 Name string Avatar string}func GetUserInfo() *Use
2021-06-10 21:02:54 455
原创 Golang:JSON和int64、interface的那些事儿
先来看一下 : JSON number的那些事golang 数据类型和json类型对照关系表:bool, for JSON booleansfloat64, for JSON numbersstring, for JSON strings[]interface{}, for JSON arraysmap[string]interface{}, for JSON objectsnil for JSON nulljson中没有int64类型的,反序列化的时候,如果直接用json.Unmars
2021-06-09 10:16:34 4138
原创 Golang高并发处理模型
原文链接:https://mp.weixin.qq.com/s/ZqfN8UlWRpoGhznGH-L1mw介绍偶然间看到一篇写于15年的文章,说实话,标题确实吸引了我。关于这篇文章,我就不直接翻译了,原文地址我放在文章最后了。项目的需求就是很简单,客户端发送请求,服务端接收请求处理数据(原文是把资源上传至 Amazon S3 资源中)。本质上就是这样,我稍微改动了原文的业务代码,但是并不影响核心模块。在第一版中,每收到一个 Request,开启一个 G 进行处理,很常规的操作。初版pack
2021-06-04 09:55:00 463
原创 关注流、群聊会话IM等系统简要设计
在公众号: 低并发编程 看到一篇浅显易懂的关注流和群聊会话的架构设计历程,关于读扩散、写扩散(文章中的推、拉模型)的理解和使用都讲的不错。传送门:你管这叫关注流
2021-06-03 11:26:02 398
原创 Auth2.0拿code换token,拿token换用户信息
先post一篇介绍Auth2.0的文章:Auth2.0, 链接失效的话,看本地PDF文件。来源于WeChat公众号:低并发编程之前做过oidc的权限登陆,原理基本上就是Auth2.0。auth2.0有好几种认证模式,一般大家用的也都是授权码模式(也就是多一步返回code的操作)。下面先引用作知乎用户回答:链接:https://www.zhihu.com/question/27446826/answer/127367856先确认一下 oauth2 code 认证的角色1,client——通
2021-05-27 21:01:30 3726
原创 杂想:为什么是传输层进行差错控制不是应用层?
问题:在看thrift协议的时候,突然想到差错控制为什么要在传输层(单指tcp)做,而不是更上一层的应用层?思路:后来仔细一想,虽然客户端在打包的时候,是从应用层开始从上往下填充的,但是服务端解析的时候是反着来的,从下往上的,这也是为什么TCP/IP被称为协议栈的原因之一。(刚好满足栈的特性)所以,我们在进行差错控制的时候,比如看序号有没有乱,是先解析到tcp的,此时应用层还在tcp的数据段里面没有解析出来,这时候在服务端看来,它看到的就是一个单纯的网络段–tcp报文,跟业务是没有关系的,它通过tc
2021-05-26 17:58:32 667
原创 AB实验流量正交的理解
【假设】比如有1、2两个实验层。1层开了一个实验,对照组A,实验组B,各n%流量。2层开了另一个实验,对照组C,实验组D。各%m流量。【说明】正交的意思就是1层的流量会随机均匀地影响2层的流量。【现象】这样2层对照组C中,会有n%*m%的流量命中实验B,实验组D中,也会有n%*m%的流量命中实验B。【解决的问题】1层的实验如果流量分配不均可能导致2层实验数据不可信,但是既然C、D两组受到B实验组的影响是一致的都是n%*m%的用户,那这个影响就可以忽略了。...
2021-05-20 20:20:57 5750
原创 select和count一起使用返回一条数据
背景:在项目开发过程需要用到count 和 select一起使用的情况,最后只返回一条数据。如下图是select里面用了count, 只返回一条数据下图为去掉count语句结果:返回10条数据。原因解析:count本来就是返回一个统计结果,结果只有一个(count(1)的结果不管运行几遍都是22)的时候显然只返回一条数据。如果返回多条,显然是要使用group by,否则的话就是只返回一条袭。但是一般情况下,在sql语句里select和count就是要分开实现,即便通过join可能会得到想要
2021-05-18 14:02:40 3277
原创 一台主机最多保持65535个TCP连接吗?
微信公众号:低并发编程原文链接:传送门一个主机最多建立多少TCP连接?65535?我是一个 Linux 服务器上的进程,名叫小进。老是有人说我最多只能创建 65535 个 TCP 连接。我不信这个邪,今天我要亲自去实践一下。我走到操作系统老大的跟前,说:“老操,我要建立一个 TCP 连接!”老操不慌不忙,拿出一个表格递给我,“小进,先填表吧”我一看这个表,这不就是经典的 socket 四元组嘛。我只有一块网卡,其 IP 地址是 123.126.45.68,我想要与 110.242.68.
2021-05-12 09:55:55 1065
原创 记一次goer新手的using unaddressable value错误
go测试的时候,报错;go test 报错panic: reflect: reflect.Value.Set using unaddressable value [recovered]。解决办法:一般出现 using unaddressable value 错误,表示传递的指针值不对,比如需要传递指针地址的,但是传了值。当时就就预感应该是db在find的时候传了非指针,验证之后果然是。所以,总结就是:gorm里面更新的时候,可以不传指针(如果要用到返回的主键,还是要传指针的),但是查询的时候一定要传,
2021-04-30 17:16:38 5368 1
原创 golang:var、new、make区别及使用
先整明白go里面的几大变量“类型”(不严谨,只是个人在使用的时候常用到的结构的一个划分)(1) 值类型: int32, string, struct 这种(2) 引用类型:主要是map, slice,chan 这三个引用(make创建内存的)(3)指针类型:那就多了, *int64, *struct…(1)对于值类型的变量,我们通过var 声明(包括结构体),系统会默认为他分配内存空间,并赋该类型的零值。如下,我们声明一个int类型变量i,输出为0。var i intfmt.Println(
2021-04-18 21:30:38 5414 3
原创 golang json包变量不加tag
json包里使用的时候,结构体里的变量不加tag能不能正常转成json里的字段?(1)如果变量首字母小写,则为private。无论如何不能转,因为取不到反射信息。(2)如果变量首字母大写,则为public。(3)不加tag,可以正常转为json里的字段,json内字段名跟结构体内字段原名一致。(4)加了tag,从struct转json的时候,json的字段名就是tag里的字段名,原字段名已经没用。举例package mainimport ( "encoding/json" "f
2021-04-18 20:15:24 647
原创 golang翻转含有中文、数字、英文字母的字符串
翻转含有中文、数字、英文字母的字符串“你好abc啊哈哈”package mainimport"fmt"func main() { src := "你好abc啊哈哈" dst := reverse([]rune(src)) fmt.Printf("%v\n", string(dst))}func reverse(s []rune) []rune { for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { s[i], s[j] =
2021-04-18 20:11:09 360
原创 golang中 struct{} 和 struct
golang中 struct{} 和 struct使用 new 函数时,声明变量和分配内存并不需要放在一起,可以先声明一个变量,然后再通过 new 函数为之分配内存,比如下面的写法:var nick *Personnick = new (Person)new 函数的特点是只能把内存初始化为零值并返回其指针,如果要通过字面量初始化该内存就需要使用混合字面量语法:&T{…}比如下面的写法:nick := &Person{ Name: "nick", Age:
2021-04-15 21:52:18 438
转载 微服务时代--service mesh&AGW
转载自:https://zhuanlan.zhihu.com/p/61901608Service MeshService Mesh作为下一代微服务技术的代名词,初出茅庐却深得人心一鸣惊人,大有一统微服务时代的趋势。那么到底什么是Service Mesh?一言以蔽之:Service Mesh是微服务时代的TCP协议。有了这样一个感性的初步认知,我们再来看到底什么是Service Mesh。提到Service Mesh,就不得不提微服务。根据维基百科的定义:微服务 (Microservices)
2021-04-11 10:04:30 494 1
原创 MySQL中的int(11)和varchar(255)含义
转载自:https://www.cnblogs.com/chenmingjun/p/10556206.html一、前言在工作中经常要与 mysql 打交道,但是对 mysql 的各个字段类型一直都是一知半解,因此写本文总结记录一番。二、简介对于 int 类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的 int(11) 代表什么意思,很长时间以来我都以为这代表着限制 int 的长度为 11 位,直到有天看到篇文章才明白,11 代表的并不是长度,而是字符的显示宽度,在字段类型为 int
2021-04-09 10:03:29 5048
原创 Golang为什么Response.Body需要被关闭&&内存泄漏数量
转载链接:https://www.jianshu.com/p/407fada3cc9dBody io.ReadCloserThe http Client and Transport guarantee that Body is always non-nil, even on responses without a body or responses with a zero-length body. It is the caller's responsibility to close Body. T
2021-04-05 21:28:51 2407
原创 golang break跳出 for-switch 和 for-select 代码块
没有指定标签的 break 只会跳出 switch/select 语句;若不能使用 return 语句跳出的话,可为 break 跳出标签指定的代码块:// break 配合 label:loop 跳出指定代码块func main() {loop: for { switch { case true: fmt.Println("breaking out...") //如果这里只用break的话会死循环,一直打印br
2021-04-05 09:35:30 1134
原创 golang defer使用的坑
func deferTest(count int) { if count == 0 { fmt.Println("count == 0") return } defer fmt.Println("defer") fmt.Println("end")}在main函数调用:deferTest(0) // 输出 "count==0",没有输出"defer"! 因为没有执行到defer这一句!deferTest(0) // 输出 "end\n defer"所以,并不是defer语句一
2021-04-04 22:10:24 292
原创 Golang 切片append
在用Golang切片的时候,case1.比如声明:nums := make([]int, 0)这里给nums append的时候,需要使用 nums = append(nums, 1);case2.如果是:nums := make([]int, 10) 进行声明定义,第一次 可以直接 append(nums, 1) 是没问题的, nums会push进去1;但是之后的append(nums, 变量) ,nums就不一定真的append进去来。如果用 nums = append(nums,
2021-03-31 18:34:36 625
转载 Go循环内多协程引用循环变量问题
在golang的循环里面,多协程并发引用循环变量!package main import ( "fmt" "time") func Process1(tasks []string) { for _, task := range tasks { // 启动协程并发处理任务 go func() { fmt.Printf("Worker start process task: %s\n", task) }() }} func Process2(tasks []string
2021-03-31 14:50:08 1331
原创 关于MD5和RSA加密算法
之前对加密算法总有疑问: 如果坏人拿到加密后的信息,不就可以倒推出来原始信息了吗?原因在于没有真正理解各个加密算法的特性。来,先看下MD5。1.MD5加密MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),MD5算法的使用不需要支付任何版权费用。MD5的功能:①.输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);②.不同的输入得到的不同的结果(唯一性);③.根据128位的输出结果不可能反推出输入的信息(不可逆),也就是只能加密,
2021-03-21 19:59:08 879
原创 leetocde367. 有效的完全平方数
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。进阶:不要 使用任何内置的库函数,如 sqrt 。示例 1:输入:num = 16输出:true示例 2:输入:num = 14 输出:false方法1. 利用 1+3+5+7+9+…+(2n-1)=n^2,即完全平方数肯定是前n个连续奇数的和 public boolean isPerfectSquare(int num) { for (int i = 1; n
2021-03-21 15:32:52 101
原创 2021年上海互联网公司非官方排名
2021年上海互联网公司非官方排名第一梯队——六巨头1.阿里巴巴(阿里上海研发中心,闵行大虹桥,本地生活总部:盒马/口碑,阿里国际站等,10-10-5,年底一般1+3=4个月,极少数最多可拿7个月,考核按3-6-1比例);2.腾讯(腾讯华东总部,徐汇漕河泾,游戏、人工智能、云计算等,10-10-5,年底标准2个月,但是一般能拿4个月,极少数拿8个月,部分团队n个月,考核按 1 星到 5 星);3.字节跳动(上海研发中心,闵行漕河泾,抖音、游戏、教育等,不同岗位加班差距很大,部分大小周,年终0-6个月
2021-03-05 15:15:31 1771
原创 Go单例模式理解
对于被Go语言天生支持并发的特性吸引来的跨语言学习者来说,我觉着掌握Go语言的语法并不是最难的,最难的是突破既有的思维定势,真正理解并发和使用并发来解决实际问题。Go语言太容易实现并发了,以至于它在很多地方被不正确的使用了。常见的错误有一些错误是很常见的,比如不考虑并发安全的单例模式。就像下面的示例代码:package singletontype singleton struct {}var instance *singletonfunc GetInstance() *singleton
2021-02-20 09:55:51 250
原创 golang值引用和指针引用,结构体拷贝
结构体拷贝先声明一个狗狗的结构体type Dog struct { name string age int8}// 重写String接口func (Dog *Dog) String() string { return fmt.Sprintf("this dog's name: %s, it's age: %d",Dog.name,Dog.age)}1.普通声明及值拷贝可以看到输出的时候并没有用到重写的String方法(毕竟不是指针)func main() { d1 := D
2021-02-15 17:32:46 3648
原创 go指针和函数传参
关于参数传递其实go的参数传递,核心就是一句话:go里所有参数传递都是值传递,既把参数复制一份放到函数里去用。PS: 传的指针也是值拷贝!(具体总结继续往下看)go的函数传参,不管参数是什么类型,都会复制一份,然后新的参数在函数内部被使用。不像其他语言,有的时候传参只是传递一个原来参数的引用,在函数内部操作变量,其实还是操作的原变量。go内不会直接的操作原变量。关于指针相比于C里的指针,go内部的指针一个被简化过的指针,指针可以取值获取其变量;变量可以取地址获取一个指针类型的值。 但是不可以对
2021-02-14 10:19:22 1896
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人