Go日志解析-xx科技笔试题解
Go日志解析-笔试题解此次笔试题目要求我们开发一个高性能的日志解析工具,能够从40万行标准Go日志中提取三种关键信息块:
数据竞争问题(Data Race)信息
Panic异常信息
运行时间超过20分钟的goroutine信息
关键挑战点:
需要通过HTTP下载远程日志文件
使用正则表达式精确匹配各类日志块
构建状态机处理复杂的panic日志格式
代码需通过并发测试(10个并发协程同时执行)
仅允许使用Go标准库
结果必须精确通过字符串断言测试
解题思路
解析工作分为三个核心部分:
1. 数据竞争信息提取使用正则表达式匹配以==================开头,包含WARNING: DATA RACE的日志块,一直到下一个==================结束。这些块包含了哪些goroutine之间发生了数据竞争。
2. 长时间运行goroutine提取使用正则表达式匹配包含运行时间信息的goroutine日志,提取出运行超过20分钟的goroutine信息。
3. Panic信息提取这里我实现了一个状态机来处理panic信息:
三个状态标志:isCollecting( ...
2024,成长与短暂的一年:我的技术成长不完全回顾
年末碎碎念又是一年的最后一天,窗外的雪花悄悄落下,伴随着键盘敲击的声音,我的代码和2024一起,都要画上句号了…(想象的)
回望这一整年,竟有些恍惚,仿佛前天还在挂机学习通,昨天在为春招疯狂复习面经,今天已经在为毕设焦头烂额。时间是写代码时最快的存在,不知不觉间,我的大四已经过去一半,我的大学生涯也已临近尾声…
项目中的成长大创IM系统:那些熬夜的痕迹接手这个项目可以说是我的技术转折点,从此知道了什么叫”看上去简单,做起来复杂”。
当我第一次写下new ServerBootstrap()时,完全没想到后面等着我的是:
消息延迟问题( “怎么群里发消息经常隔了好几秒才收到?”)
连接暴增( “怎么新建一个通话就要建立这么多ws链接?!”)
内存爆炸( “压测才一分钟服务器又OOM了…”)
解决这些问题的过程真是一把辛酸泪。但也正因如此,我对消息中间件、异步编程和分布式系统的理解达到了新高度。
最自豪的改进:将消息分发架构从单队列改为多级队列分片处理,吞吐量从320/秒飙升至940/秒,这段代码简直是我的得意之作,每次看到它正常运行都有种”看我的孩子长大了”的感觉。
Aki-RPC:从 ...
从零开始的RPC开发旅程-框架设计与核心协议篇 0x01
从零开始的RPC开发旅程-框架设计与核心协议篇 0x01
“好的开始是成功的一半,而一个优雅的协议设计则是RPC框架的灵魂。” —— 沃兹基索德
万恶之源:为什么需要RPC框架?记得那是一个普通的下午,咱们正在为一个分布式系统设计服务间的通信方案。面对复杂的网络环境和性能要求,我开始思考:为什么现有的RPC框架总是让咱们觉得不够”顺手”呢?要么太重,要么太轻,要么扩展性差,要么性能不够理想。
“为什么不自己设计一个RPC框架呢?一个既轻量又高性能,既易用又可扩展的框架。” —— 海斯涡
就这样,Aki-RPC的旅程开始了。(耶~~
1.第一步:协议设计首先咱们要做的,就是设计一个RPC协议。不过在设计自定义协议前,咱们最最最先需要思考的是:应该如何设计一个既高效又可靠的通信协议?这不得不提起TCP/IP协议的设计理念——分层和模块化。
首先什么是TCP/IP 协议?他的分层和模块化又是什么?TCP/IP协议的设计采用了分层结构,主要分为以下四个层次:
应用层:负责处理应用层协议,例如HTTP、FTP等。在RPC中,这一层是服务提供者和消费者交互的地方,包含了业务逻辑的处理。 ...
从零开始的RPC开发旅程0x00 - 一切的前言————Netty
导语:Netty 一切的开端
RPC(Remote Procedure Call)远程过程调用,简单理解是一个节点请求另一个节点提供的服务,这其中就涉及到了网络通信,Java做网络通信这块,离不开Netty框架。
咱们后端程序员想要进阶,绕不开Netty。如果你想探索更底层的网络模型,同样绕不开Netty。网络通信编程,是通往神级程序员的必经之路,其中涉及到的知识浩渺如海,但同时也能让你得到技术升华。加更多班
那么问题来了,Netty到底是什么?
Netty是一款基于NIO(Nonblocking I/O,非阻塞IO)开发的网络通信框架。它极大地简化了TCP、UDP等网络编程的复杂性,是当前Java网络编程的首选框架。
接下来,咱们一起深入了解Netty背后的核心概念和技术原理!
一、理解IO模型:网络通信的基础想象一下这个场景:应用A向应用B发送一条消息。这个看似简单的过程,背后涉及了哪些步骤呢?
应用A把消息发送到TCP发送缓冲区
TCP发送缓冲区将消息发送出去,经过网络传递
消息到达B服务器的TCP接收缓冲区
应用B从TCP接收缓冲区读取数据
看起来很简单,但问题就出在最后 ...
大数据去重神器:位图与布隆过滤器详解
前言最近总是在各大技术平台刷到这样一个经典面试题:
如何对40亿QQ号进行去重…
嗯?40亿?这个数字有点恐怖啊,按常规思路光存储起来都要占用不少内存,还要在此之上去重,想到这手就忍不住伸向了投降键…
别急,让咱们一起来看看有没有更聪明的解决方案。
在处理海量数据时,如何高效去重是一个常见问题。想象一下,如何对40亿QQ号进行去重?传统方法可能会占用大量内存,今天咱们就来探讨两种高效的数据结构:位图(Bitmap)和布隆过滤器(Bloom Filter)。
传统存储方式的问题首先咱们计算一下:存储40亿QQ号需要多少内存?
使用无符号整数存储时,一个整数需要4个字节(Byte),那么40亿QQ号需要:14 * 4,000,000,000 / 1024 / 1024 / 1024 ≈ 15GB
在实际业务中往往需要更多空间。而且在Java中并不存在无符号整型,只有几个操作无符号的静态方法。
数据单位换算:1GB = 1024MB,1MB = 1024KB,1KB = 1024Byte, 1Byte = 8b
n个小时后…终于存好了,接下来咱们开始计算吧!等等,存好了?真的吗?1 ...