面试准备

语言 php 框架(laravel) socket编程,异步协程通信swoole php8 语言特性 php 底层实现原理(某个函数的实现,比如in_array; 某个语言结构,比如array) Golang Web框架 gin(目前使用的比较广泛的框架) 优点,与echo相比的优势 channel 通道 interface 接口 可看看B站泄漏的go代码结构 底层的一些实现原理及区别,比如array与slice 数据库及NoSql mysql的索引优化等 es相关可看看 redis相关使用场景 容器 docker相关 k8s相关 队列 rabbitMQ,目前公司消息队列使用 kafka,目前公司大数据存储使用 rocketMQ 阿里生态 计算机网络及网络协议 TCP的三次握手 socket相关 mqtt相关 wireshark抓包及tcpdump抓包 算法 letcode刷题

三月 4, 2021 · nobject

vim常用快捷键使用指南

自己在工作中经常使用的vim快捷键 快捷键 描述 0 跳至行首,不管有无缩进,就是跳到第0个字符 (常用) $ 跳至行尾 (常用) gg 跳至文首 (常用) G 调至文尾 (常用) dd 删除光标所在行 (常用) n+[Enter] n 为数字。光标向下移动 n 行(常用) :1,$s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 !(常用) dw 删除一个字(word) yy 复制一行 p 粘贴 /pattern 向后搜索字符串pattern n 下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个) N 上一个匹配(同上) :w 将缓冲区写入文件,即保存修改 :wq 保存修改并退出 :x 保存修改并退出 :q 退出,如果对缓冲区进行过修改,则会提示 :q! 强制退出,放弃修改 :set nu 显示行号 :set nonu 与 set nu 相反,为取消行号! i 从目前光标所在处输入 [Esc] 退出编辑模式,回到一般模式中(常用) u 复原前一个动作。(常用) [Ctrl]+r 重做上一个动作。(常用)

十二月 22, 2020 · nobject

计算机网络 - tcp协议

定义 TCP提供一种面向连接的、可靠的字节流服务。所谓面向连接,即应用程序在使用TCP协议之前,必须先建立TCP连接,在传送数据完毕后,必须释放已经建立的连接。这个过程可以通俗的比喻成通话过程,在通话之前,必须先拨通号码,对方也必须接听,之后才可以通话。 所谓可靠的服务,即表示TCP连接传送的数据可以做到无差错,不丢失,不重复等。 握手 TCP的传输需要先建立连接,整个建立连接的过程一般称为三次握手 为什么是三次,不是两次,甚至更多 建立连接的过程是要保证双方可通信。比如邀请女神约会,我们都得先确定可以去,女神也得确定我可以去,不然谁先到约会地点就谁尴尬,容易被放鸽子。 我 –> 明天晚上可以一起看电影么? –> 女神 女神 –> 可以啊 –> 我 如果两次握手是这样的,第一,女神这边确认是可以收到消息的了,我这边是确认可以发送消息的了。但女神那侧也并不确认自己是发送成功了,那怎么判断能发送成功,只能通过我这方再次发送通知过去才可以。 我 –> 收到啦,一言为定 –> 女神 当进行了第三次握手的时候,我们双方才能确定,前两次的话是生效了,三次握手的目标就是使双方心里都有底,确保双方最基本的发送与接收功能正常。女神可以确认自己的收发能力都OK,我也确认了自己的收发能力OK,才能最基本上的保证不被放鸽子,双方心里都有底。 为什么不是更多? 因为三次握手是确保双方通信条件都OK的最基本的方式,如果更多次,当然也可以,但是,会增加网络的消耗,4次,甚至5次…N(N>5)次,也只能确保前N-1是正常的,也不能确保之后通信就是完全正常,所以3次是最好的握手判断。 三次握手的过程 TCP 报文 源端口与目的端口,各占2字节,16位 序号,4个字节,0~$$2^32$$ -1。起始序号在连接建立时设置,首部中的序号是指本报文段所发送的数据的第一个字节的序号。 例如,一个报文段第一个字节序号是301,最后一个字节序号是400,则下一个报文段的数据序号就得401. 确认序号,4个字节,期望收到对方下一个段文段的第一个字节的序号。 例如,收到了对方发来的报文段,序号字段是501,数据长度是200字节,则期望收到对方下一个数据序号为701,此时,就将发送给对方的确认序号设置成701. 首部长度,4位。首部长度最小为20个字节,但因为包含选项(不定长),但最大长度只能是60个字节。因为该值长度为4位,4位最大值表示15,也代表整个首部最长为60字节,选项长度最大为40字节 保留位,6位,为今后所用,目前应置为0 紧急URG(URGent)当URG = 1时,表明紧急指针字段有效,与紧急指针字段配合使用,代表该报文段中有紧急数据,需加急处理 确认ACK(ACKnowledgment)当ACK = 1时确认号字段有有效,ACK = 0时,确认号无效,在连接建立后,所有传送的报文段都必须置ACK = 1 推送PSH(PuSH)两应用程序进行交互式通信时使用,当PSH = 1时,接收方应尽快的交付接收应用进程,不用等缓存满了再向上交付。该操作很少使用 复位RST (ReSeT) 当RST = 1时,表明TCP连接中出现严重差错(如主机崩溃),必须释放连接,然后再重新建立连接。RST = 1还用来拒绝非法报文段或拒绝打开一个连接 同步SYN(SYNchronization)在连接建立时用来同步序号。SYN = 1而ACK = 0时,说明这是一个连接请求报文段。对方若同意建立连接,则应在响应报文中设置SYN = 1 ,ACK = 1. 终止FIN (FINis)用来释放一个连接,当FIN = 1时,表明报文段的发送方数据已发送完毕,并要求释放连接 窗口 2字节,用于告诉对方,允许对方发送的数据量大小,自己的缓存空间还可接收多少数据量。 校验和 2字节,检验首部与数据 紧急指针 2字节。URG = 1时配合使用,本报文中紧急数据的末尾在报文中的位置 选项 最长40字节 挥手 为什么是4次,不是3次,甚至更少 4次挥手过程 如何实现可靠性

八月 21, 2020 · nobject

生活不易,且行且珍惜

深夜,蝉鸣,刚涂了药,旁边风扇呼呼大响,猫还在发呆。而我,思绪上头,压抑不住,还是决定写上一笔。 不知是我性格变了还是工作环境变了,现在开会,时常与产品经理吵闹。在大多数公司,产品经理与程序员是平级的,而在这公司,却不同,可能是产品驱导型的吧,产品经理像是小组里的老大,绩效评分,包括其他的一些决定,都由产品经理来主导。说说自己的想法吧,一个产品的好坏,固然产品经理重要,但也不能忽视程序员及测试的感受吧。现在开会大多数时候,产品就说几个字,我们这功能不管怎样,这个月底要上线,请你给我做出来,当然,我们的估时从来都是不听的,我说我东西这周这些时间肯定完成不了,他说肯定可以,当然你可以你来就是了。当然你又会说,你不是吃这门饭的,说到底,就是气势压人一等,话就可以放大声。这就是所谓的工作吧,其实有时候就在想,如果才能让团队有干劲,能够服从安排,能够心甘情愿的付出,其实很简单,能同甘共苦,能够自己做好表率,你一个产品,有时候给出的东西都是有缺陷的,你让人怎么按时完成,你一个产品,有时候别人工作的时候,你让人帮你查数据,一查就是一天,这部分估时算在谁身上呢。所以,你给功能定时的时候,想想有多少时间你把别人的给占用了。你是否考虑过别人,明明上周估的是两周,当然,周一请假,周二定时间,给你查数据一天,自己就两天的开发时间,你算5天,够牛逼的。有时候就算你说两周,但你也得看看你把人家消费的时间给弥补上去啊,难不成那些时间都得周末去补上? 其实人是该为自己争取权利的,我不再是以前的傻瓜了,完不成你想开掉我就开掉我,我自认为我也问心无愧。当然你认为我能力不行,我调岗,你招新人顶上就是。 我们都在为生活奔波,有时候这些委屈就只能自己承受着。成年人的崩溃,确实有时候就在那么一瞬间,你想要稳定,不一定别人愿意给你稳定。在三十岁之时,不再像年轻20来岁时那么意气用事,因为那时候不开心就是直接离职了,连吵都懒得吵,但生活的压力与能力的要求,这种年龄段就让人很纠结。只有自己强大,才有更多的选择权。 生活不易,且看山高水涨,却有心无力; 三十而立,纵使世间万般亏待,也应乘风破浪。

八月 18, 2020 · nobject

计算机网络系列 - 笔记

此系列用于记录计算机网络相关的知识要点 一来,复习巩固这一块的知识,防止每次用到相关知识却各种的查找资料。 二来,加强这一块的学习,自己之前也有很多不懂的地方,需要记录与学习 目前分以下下节整理 物理层 数据链接层 传输层 3.1 传输层 - TCP 3.2 传输层 - UDP 网络层 应用层 常用协议 DHCP 常用协议 ICMP 常用协议 ARP DNS

八月 15, 2020 · nobject

人生克星 - 皮肤病

想不起多少次得皮肤病了,印象中,学生时代,以前每个暑假开始,我就步入得皮肤病的节奏。这导致我每个暑假都过得很不舒心,有一半时间都在骚痒的时光中度过。 我一直都想不明白,一个粗糙的男生,皮肤会如此脆弱。动不动就来这一遭,毁了学生时代的美好暑假。心想,毕业工作了,不在外面浪了,总不会还频频得皮肤病吧。然而,工作后,依然还是逃不过老天所谓的‘眷顾’,对,它还是来了,虽会迟到,但从未缺席。想起那年夏天去找工作,本来信心满满的去苏州,住进旅馆才两天,好好的一个人,就先进了医院,人生地不熟的,满身的红疹子,在一家中西医馆中看了病蒸了桑拿,过了好一段时间才有好转,而找工作就暂时搁浅了。 旅馆是皮肤病容易引起的高发原因,自己因为住旅馆至少3次导致了发病,因为他们的有些床单并未清洗干净,还有各种螨虫在,因此很容易导致皮肤过敏。这次也不例外,而且越来越严重,从小颗粒状变成片状,从微红变成紫色。不得已还是去了医院,近些年来,去医院的频次也越来越高了,身体上的力不从心,这种感觉变得越发强烈,想想就感觉到绝望。 生活不容易,此时的我心力交悴。我心里多希望病痛离我远一点,而自己却感觉离他们越来越近。为什么我越排斥,它却越粘着我,恳请放过我。

八月 10, 2020 · nobject

Manjaro 如何安装旧版本软件

manjaro的包更新机制导致其pacman包管理的下载的都是最新版软件。而往往有些时候我们并不需要最新的,如何解决呢? 我们可以两种方式解决 方式一 使用downgrade 使用downgrade命令的前提是你之前已经安装过该软件包。如没有安装过,则跳过看方式二。 首先需要安装downgrade包 1 ➜ sudo pacman -S downgrade downgrade的用法很简单 1 用法: downgrade [option...] <包> [包...] [-- pacman_option...] 比如我要降级goland 1 2 3 4 5 6 7 8 9 10 11 ➜ sudo downgrade goland Downgrading from A.L.A. is disabled on the stable branch. To override this behavior, set DOWNGRADE_FROM_ALA to 1 . See https://wiki.manjaro.org/index.php?title=Using_Downgrade for more details. 可选的包: - 1) goland 2019.2.5 1 x86_64 (本地) - 2) goland 2020....

八月 5, 2020 · nobject

Leetcode 26 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “"。 示例 1: 1 2 输入: flower","flow","flight"] 输出: "fl" 示例 2: 1 2 3 输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。 说明: 所有输入只包含小写字母 a-z 。 解题思路: leetcode官方提供了不少解决方案. 主要解决方案有: 横向扫描法, 纵向扫描法,分治法, 二分查找法, 字典树. 个人觉得纵向扫描法是最容易想到的,而且效率也不错. 纵向扫描法: 纵向扫描时即依次遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func longestCommonPrefix(strs []string) string { strsLen := len(strs) if strsLen == 0 { return "" } for i := 0; i < len(strs[0]); i++ { for j := 1; j < strsLen; j++ { if i == len(strs[j]) || strs[0][i] !...

七月 29, 2020 · nobject

Leetcode 350 两个数组的交集 II

给定两个数组,编写一个函数来计算它们的交集。 示例 1: 1 2 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 1 2 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 我们可以不考虑输出结果的顺序。 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法? 如果 nums1 的大小比 nums2 小很多,哪种方法更优? 如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办? 解题思路【哈希法】: 将其中一个数组转换成哈希Map的类型,key为数组的值,value为数组中该数出现的次数。 循环遍历另一个数组,通过Map中是否有该值来判断,如果有相同的值,则记录该值,同时将Map对应key的value值减1. 时间复杂度:O(max(n,m)) 空间复杂度:O(min(n,m)) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 func intersect(nums1 []int, nums2 []int) []int { m := map[int]int{} ret := []int{} for _, v := range nums1 { m[v]++ } for _, v := range nums2 { if m[v] !...

七月 28, 2020 · nobject

Leetcode 26 删除排序数组中的重复项

给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 示例 1: 1 2 3 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 1 2 3 给定 nums = [0,0,1,1,1,2,2,3,3,4], 函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。 你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: 1 2 3 4 5 6 7 // nums 是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates(nums); // 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。 for (int i = 0; i < len; i++) { print(nums[i]); } 思路:...

七月 27, 2020 · nobject

golang channel

channel是golang中重要的组成部分。也是协程通信间通信的方式 channel常见理论面试题 channel 什么情况下会出现panic 试图往已close的channel继续发送 试图关闭已关闭的channel 试图关闭一个nil的channel 向为nil的channel发送数据会怎样 给定一个 nil channel c: <-c 从 c 接收将永远阻塞 c <- v 发送值到 c 会永远阻塞 channel close后读的问题 关闭后继续读数据,已在缓冲区内的可以读取到数据,而后得到的是零值(对于int,就是0)。 我们可以通过for循环遍历channel,来获取到已经写入的值 1 2 3 for _, v := range channel{ } 对于可能获取到零值,我们可以使用断言判断,ok为false代表channel已关闭后读取的 1 value, ok := <- channel 也可以在close channel之后有意将channel 置为 nil, 如此再使用,并不会读取到零值 对于不带缓冲的ch,和带缓冲的一样,channel close掉之后并不影响读,只影响写入 channel底层源码剖析 go的运行时源码在runtime/chan.go文件下,可以在该文件下查看具体的数据结构,send(channel <-),receive(-> channel),close channel等操作 数据结构 1 2 3 4 5 6 7 8 9 10 11 12 type hchan struct { qcount uint // total data in the queue 代表 chan 中已经接收但还没被取走的元素的个数。内建函数 len 可以返回这个字段的值。 dataqsiz uint // size of the circular queue 循环队列的大小 buf unsafe....

七月 25, 2020 · nobject

夜无眠 - 深夜

一:天气炎热 自从被骗后,夜里一两点睡觉已是家常便饭了,有时候并不是睡不着,而是心中压着的大石,总是让人在深夜想起来,这种感觉说不出来怎么形容。而天气的燥死,为自己深夜里无法入眠更加一筹。 二:淡忘过往 曾经相信世间所有的美好,无比想念以前的时光。有人说,那是因为现在过得不开心,生活不遂人意,才会怀念曾经。细想来这话也一点毛病也没有,如果现在过得好,肯定是沉醉于现在,又何必去想往事的美好呢。 深夜里,曾经多少次给自己打气加油,让自己能有勇气想起悲伤的事时,也不会难过的无以复加。但其实,不去想才是真正可以让人淡忘的。不去想这些,是不是生活会更舒心一点。但精神上的麻醉实在太难了,天天玩游戏,天天刷视频,其实也只是麻醉了短暂的时间而已。我向来是对这种状态嗤之以鼻的,而现在却只有这种状态才能把自己麻痹了,也真是讽刺与无奈。我渴望有朋友的关怀,渴望有朋友的记挂,但我不知道我还有没有这样的朋友。也许曾经有吧,现在已经没有了,不然,为什么有些人不会再来关心你了呢,我自己大抵上有时候会失望,大多数时候还是默认了其实他也不是我最好的朋友了。分开后,形同陌路,也好也罢,经历了这么多,也看开看淡了。 三:强大自己 我想我该怎样才能站起来,让自己着眼于现在,让现在更精彩一些,不至于魂不守舍,不至于时常崩溃。可能多学点技能让自己强点才能让自己摆脱现状吧。

七月 24, 2020 · nobject