hellcox

hellcox 查看完整档案

成都编辑  |  填写毕业院校  |  填写所在公司/组织 segmentfault.com 编辑
编辑

我愿代替她的双眼,看繁花似锦云卷云舒;我愿成为她的双脚,踏遍天涯海角山川万里。

个人动态

hellcox 赞了回答 · 4月15日

解决为什么总是让我这个前端改php呢?

原因很简单,如果你可以改,老板就可以省掉一个php的成本,具体怎么选择看你自己考虑的发展路线

关注 5 回答 4

hellcox 赞了文章 · 4月12日

【吐血整理】超全golang面试题合集+学习指南+知识图谱 涵盖大部分golang程序员所需要掌握的核心知识

由于外链问题,完整版可【点击】阅读原文或到 github项目 中,欢迎关注。

目录(善用Ctrl+F)

基础入门

新手

数据类型

流程控制

进阶

包管理

优化

并发编程

高级特性

问题排查

源码阅读

汇编

实践常用工具

其他

常用官方包

  • fmt - 实现格式化的输入输出操作,其中的fmt.Printf()和fmt.Println()是开发者使用最为频繁的函数。  
  • io - 实现了一系列非平台相关的IO相关接口和实现,比如提供了对os中系统相关的IO功能的封装。我们在进行流式读写(比如读写文件)时,通常会用到该包。  
  • bufio - 它在io的基础上提供了缓存功能。在具备了缓存功能后, bufio可以比较方便地提供ReadLine之类的操作。  
  • strconv - 提供字符串与基本数据类型互转的能力。  
  • os - 本包提供了对操作系统功能的非平台相关访问接口。接口为Unix风格。提供的功能包括文件操作、进程管理、信号和用户账号等。  
  • sync - 它提供了基本的同步原语。在多个goroutine访问共享资源的时候,需要使用sync中提供的锁机制。  
  • flag - 它提供命令行参数的规则定义和传入参数解析的功能。绝大部分的命令行程序都需要用到这个包。  
  • encoding/json - JSON目前广泛用做网络程序中的通信格式。本包提供了对JSON的基本支持,比如从一个对象序列化为JSON字符串,或者从JSON字符串反序列化出一个具体的对象等。  
  • http - 通过http包,只需要数行代码,即可实现一个爬虫或者一个Web服务器,这在传统语言中是无法想象的。  

常用第三方包

必看项目

其他优秀的开源工具分类

音频和音乐

  • EasyMIDI - EasyMidi是一个简单可靠的库,用于处理标准Midi文件(SMF)。
  • flac - 支持FLAC流的Native Go FLAC编码器/解码器。
  • gaad - 本机Go AAC比特流解析器。
  • go-sox - 用于go的libsox绑定。
  • go_mediainfo - 用于go的libmediainfo绑定。
  • gosamplerate - 用于go的libsamplerate绑定。
  • id3v2 - 用于Go的快速,稳定的ID3解析和编写库。
  • malgo - 迷你音频库。
  • minimp3 - 轻量级MP3解码器库。
  • mix - 为音乐应用程序基于序列转到本地音频混合器。
  • mp3 - Native Go MP3解码器。
  • music-theory - Go中的音乐理论模型。
  • Oto - 在多个平台上播放声音的低级库。
  • PortAudio - 用于PortAudio音频I / O库的绑定。
  • portmidi - 绑定PortMidi。
  • taglib - 为taglib绑定。
  • vorbis - “本机” Go Vorbis解码器(使用CGO,但没有依赖项)。
  • waveform - Go程序包,能够从音频流生成波形图像。

数据结构

  • algorithms - 算法和数据结构。CLRS研究。
  • binpacker - 二进制打包程序和解包程序可帮助用户构建自定义二进制流。
  • bit - 具有额外的位旋转功能的Golang设置数据结构。
  • bitset - 实现位集的Go包。
  • bloom - 在Go中实现的Bloom过滤器。
  • bloom - Golang Bloom过滤器实现。
  • boomfilters - 用于处理连续无界流的概率数据结构。
  • concurrent-writer - 高并发直接替换bufio.Writer。
  • conjungo - 一个小型,强大而灵活的合并库。
  • count-min-log - 执行Count-Min-Log草图:使用近似计数器进行近似计数(类似于Count-Min草图,但使用较少的内存)。
  • crunch - Go包实现了用于轻松处理各种数据类型的缓冲区。
  • cuckoofilter - Cuckoo过滤器:是Go中实现的计数布隆过滤器的很好替代。
  • deque - 高度优化的双端队列。
  • deque - 快速的环形缓冲区双端队列(双端队列)。
  • dict - Go的类似Python的字典(dict)。
  • encoding - Go的整数压缩库。
  • go-adaptive-radix-tree - 自适应基数树的 Go实现。
  • go-datastructures - 有用,高性能和线程安全的数据结构的集合。
  • go-ef - Elias-Fano编码的Go实现。
  • go-geoindex - 内存中的地理索引。
  • go-mcache - 快速内存键:值存储/缓存库。指针缓存。
  • go-rquad - 具有有效点定位和邻居发现功能的区域四叉树。
  • gocache - 具有多个存储(内存,memcache,redis等),可链接,可加载,指标缓存等的完整Go缓存库。
  • goconcurrentqueue - 并发FIFO队列。
  • gods - 数据结构。容器,集合,列表,堆栈,地图,BidiMap,树,HashSet等。
  • gofal - Go的小数api。
  • golang-set - Go的线程安全和非线程安全高性能集。
  • goset - Go的有用的Set集合实现。
  • goskiplist - Go中的跳过列表实现。
  • gota - Go的数据框,序列和数据整理方法的实现。
  • hide - ID类型,将其编组进/出哈希以防止将ID发送给客户端。
  • hilbert - Go程序包,用于在空间填充曲线(例如Hilbert和Peano曲线)之间映射值。
  • hyperloglog - HyperLogLog实施,具有稀疏,LogLog-Beta偏差校正和TailCut空间减少功能。
  • iter - C ++ STL迭代器和算法的实现。
  • levenshtein - Levenshtein距离和相似性度量标准,具有可自定义的编辑费用和通用前缀的类似于Winkler的奖金。
  • levenshtein - 在Go中计算levenshtein距离的实现。
  • mafsa - 具有最小完美散列的MA-FSA实现。
  • merkletree - merkle树的实现,可对数据结构的内容进行有效且安全的验证。
  • mspm - 用于信息检索的多字符串模式匹配算法。
  • null - 可空转到类型,可以被编组/解组到/从JSON。
  • parsefields - 用于解析类似JSON的日志的工具,以收集唯一的字段和事件。
  • pipeline - 具有扇入和扇出的管线的实现。
  • ptrie - 前缀树的实现。
  • remember-go - 缓存慢速数据库查询的通用接口(由redis,memcached,ristretto或内存支持)。
  • ring - 围棋实现了高性能,线程安全的布隆过滤器。
  • roaring - 实施压缩位集的软件包。
  • set - 使用LinkedHashMap的围棋设置简单的数据结构实现。
  • skiplist - 非常快的Go Skiplist实施。
  • skiplist - Go中的跳过列表实现。
  • timedmap - 具有过期的键/值对的地图。
  • treap - 使用树堆的持久快速排序的地图。
  • trie - Go中的Trie实现。
  • ttlcache - 内存中的LRU字符串接口{}映射,其中包含golang的到期时间。
  • typ - 空类型,安全的原始类型转换和从复杂结构中获取值。
  • willf/bloom - Go包实现Bloom过滤器。

分布式系统

  • celeriac - 用于在Go中添加支持以交互和监视Celery工作者,任务和事件的库。
  • consistent - 具有受限负载的一致哈希
  • dht - BitTorrent Kademlia DHT实施。
  • digota - grpc电子商务微服务。
  • dot - 使用操作转换/ OT进行分布式同步。
  • doublejump - 改进后的Google的跳转一致性哈希。
  • dragonboat - Go中功能齐全的高性能多组Raft库。
  • drmaa - 基于DRMAA标准的集群调度程序的作业提交库。
  • dynamolock - DynamoDB支持的分布式锁定实现。
  • dynatomic - 将DynamoDB用作原子计数器的库。
  • emitter-io - 使用MQTT,Websockets和love构建的高性能,分布式,安全和低延迟的发布-订阅平台。
  • flowgraph - 基于流的编程包。
  • gleam - 用纯围棋和Luajit快速和可扩展的分布式的map / reduce系统,具有Luajit的高性能结合Go的高并发,单独运行或分发。
  • glow - 易于使用的可扩展的分布式大数据处理,Map-Reduce,DAG执行,全部在纯Go中进行。
  • go-health - health-用于在服务中启用异步依赖项运行状况检查的库。
  • go-jump - Google的“ Jump”一致性哈希函数的端口。
  • go-kit - 支持服务发现,负载平衡,可插拔传输,请求跟踪等的微服务工具包
  • go-sundheit - 建立用于支持为golang服务定义异步服务运行状况检查的库。
  • gorpc - 简单,快速和可扩展的RPC库,可实现高负载。
  • grpc-go - gRPC的Go语言实现。基于HTTP / 2的RPC。
  • hprose - 十分新颖的RPC库,现在支持25种以上的语言。
  • jsonrpc - jsonrpc软件包可帮助实现JSON-RPC 2.0。
  • jsonrpc - JSON-RPC 2.0 HTTP客户端实现。
  • KrakenD - 具有中间件的超高性能API网关框架。
  • liftbridge - NATS的轻量级,容错消息流。
  • micro - 可插拔的microService工具箱和分布式系统平台。
  • NATS - 用于微服务,IoT和云本机系统的轻量级高性能消息传递系统。
  • outboxer - Outboxer是一个实现库模式的go库。
  • pglock - PostgreSQL支持的分布式锁定实现。
  • raft - HashiCorp的Raft共识协议的Golang实现。
  • raft - 围棋实施筏一致协议,由CoreOS的。
  • rain - BitTorrent客户端和库。
  • redis-lock - 使用Redis的简化分布式锁定实现。
  • resgate - 用于构建REST,实时和RPC API的实时API网关,其中所有客户端都可以无缝同步。
  • ringpop-go - Go应用程序的可扩展,容错应用程序层分片。
  • rpcx - 分布式可插拔RPC服务框架,例如阿里巴巴Dubbo。
  • sleuth - 用于在HTTP服务之间进行无主p2p自动发现和RPC的库(ZeroMQ)。
  • tendermint - 高性能中间件,用于使用Tendermint共识和区块链协议将以任何编程语言编写的状态机转换为拜占庭容错复制状态机。
  • torrent - BitTorrent客户端软件包。

电子邮件

  • chasquid - 用Go编写的SMTP服务器。
  • douceur - CSS内衬为您的HTML电子邮件。
  • email - 用于Go的强大而灵活的电子邮件库。
  • go-dkim - DKIM库,用于签名和验证电子邮件。
  • go-imap - 用于客户端和服务器的IMAP库。
  • go-message - Internet消息格式和邮件消息的流库。
  • go-premailer - Go中HTML邮件的内联样式。
  • go-simple-mail - 使用SMTP保持活动状态和两个超时发送电子邮件的非常简单的程序包:连接和发送。
  • Hectane - 提供HTTP API的轻型SMTP客户端。
  • hermes - Golang软件包,可生成干净的响应式HTML电子邮件。
  • mailchain - 将加密的电子邮件发送到用Go编写的区块链地址。
  • mailgun-go - Go库,用于使用Mailgun API发送邮件。
  • MailHog - 通过Web和API界面进行电子邮件和SMTP测试。
  • SendGrid - SendGrid的Go库,用于发送电子邮件。
  • smtp - SMTP服务器协议状态机。

嵌入式脚本语言

  • anko - 用Go语言编写的可编写脚本的解释器。
  • binder - 转到基于gopher-lua的 Lua绑定库。
  • cel-go - 具有渐进式输入功能的快速,便携式,非图灵完整表达评估。
  • expr - 可以评估表达式的引擎。
  • gentee - 可嵌入的脚本编程语言。
  • gisp - Go中的简单LISP。
  • go-duktape - Go的Duktape JavaScript引擎绑定。
  • go-lua - Lua 5.2 VM到纯Go的端口。
  • go-php - Go的PHP绑定。
  • go-python - 与CPython C-API的幼稚go绑定。
  • golua - Lua C API的绑定。
  • gopher-lua - 用Go编写的Lua 5.1 VM和编译器。
  • gval - 用Go编写的高度可定制的表达语言。
  • ngaro - 可嵌入的Ngaro VM实现,支持在Retro中编写脚本。
  • otto - 用Go编写的JavaScript解释器。
  • purl - Go中嵌入的Perl 5.18.2。
  • tengo - 用于Go的字节码编译脚本语言。

错误处理

  • emperror - Go库和应用程序的错误处理工具和最佳实践。
  • errlog - 可破解的软件包,用于确定错误的负责任的源代码(以及其他一些快速调试功能)。可插入任何现成的记录器。
  • errors - 下拉更换为标准库的错误包和github.com/pkg/errors。提供各种错误处理原语。
  • errors - 提供简单错误处理原语的软件包。
  • errors - 简单golang错误处理与分类元。
  • errorx - 具有堆栈跟踪,错误组成等的功能丰富的错误包。
  • Falcon - 一个简单但功能强大的错误处理软件包。
  • go-multierror - Go(golang)软件包,用于将错误列表表示为单个错误。
  • tracerr - 带有堆栈跟踪和源代码片段的Golang错误。
  • werr - 错误包装程序为Go中的错误类型创建了一个包装程序,该包装程序捕获了调用它的文件,行和堆栈。

文件

  • afero - Go的文件系统抽象系统。
  • afs - Go的抽象文件存储(mem,scp,zip,tar,云:s3,gs)。
  • bigfile - 文件传输系统,支持使用http api,rpc调用和ftp客户端管理文件。
  • checksum - 计算大型文件的消息摘要,例如MD5和SHA256。
  • flop - 文件操作库,旨在与GNU cp镜像功能奇偶校验。
  • go-csv-tag - tag-使用标签加载csv文件。
  • go-decent-copy - 复制human文件。
  • go-exiftool - ExifTool的Go绑定,这是众所周知的库,用于从文件(图片,PDF,office,...)提取尽可能多的元数据(EXIF,IPTC等)。
  • go-gtfs - 在go中加载gtfs文件。
  • notify - 具有简单API的文件系统事件通知库,类似于os / signal。
  • opc - 为Go加载Open Packaging Conventions(OPC)文件。
  • parquet - 读取和写入 parquet文件。
  • pdfcpu - PDF 处理器。
  • skywalker - 一种软件包,允许一个人轻松地同时通过文件系统。
  • stl - 读取和写入STL(立体光刻)文件的模块。并发读取算法。
  • tarfs - tar文件FileSystem interface接口的实现。
  • vfs - 跨多种文件系统类型(例如os,S3和GCS)的Go的一组可插拔,可扩展且自以为是的文件系统功能。

金融

  • accounting - golang的货币和货币格式。
  • currency - 高性能和准确的货币计算包。
  • decimal - 任意精度定点十进制数字。
  • go-finance - Go中的综合金融市场数据。
  • go-finance - 金融功能库,用于货币时间价值(年金),现金流量,利率转换,债券和折旧计算。
  • go-finance - 获取汇率,通过VIES检查增值税号和检查IBAN银行帐号的模块。
  • go-money - Fowler的Money模式的实现。
  • ofxgo - 查询OFX服务器和/或解析响应(使用示例命令行客户端)。
  • orderbook - 匹配引擎的限价订单在Golang。
  • techan - 具有高级市场分析和交易策略的技术分析库。
  • transaction - 以多线程模式运行的嵌入式帐户嵌入式事务数据库。
  • vat - 增值税号验证和欧盟增值税率。

游戏开发

  • Azul3D - 用Go语言编写的3D游戏引擎。
  • Ebiten - Go中死的简单2D游戏库。
  • engo - Engo是用Go语言编写的开源2D游戏引擎。它遵循实体组件系统范式。
  • g3n - Go 3D游戏引擎。
  • GarageEngine - 用Go语言编写的2D游戏引擎,可在OpenGL上使用。
  • glop - Glop(权力游戏库)是一个相当简单的跨平台游戏库。
  • go-astar - A 路径查找算法的Go实现。
  • go-collada - Go包,用于Collada文件格式。
  • go-sdl2 - Simple DirectMedia Layer的 Go绑定。
  • go3d - 用于Go的面向性能的2D/3D数学软件包。
  • gonet - 使用golang实现的游戏服务器框架。
  • goworld - 可扩展的游戏服务器引擎,具有空间实体框架和热插拔功能。
  • Leaf - 轻量级游戏服务器框架。
  • nano - 重量轻,设备,高性能的基于golang游戏服务器架构。
  • Oak - Pure Go游戏引擎。
  • Pitaya - 可扩展的游戏服务器框架,具有群集支持和通过C SDK的iOS,Android,Unity等客户端库。
  • Pixel - Go中的手工制作2D游戏库。
  • raylib-go - 去绑定raylib,简单和易于使用的库,以了解电子游戏编程。
  • termloop - Go的基于终端的游戏引擎,建立在Termbox之上。

地理位置

  • geocache - 适用于基于地理位置的应用程序的内存中缓存。
  • geoserver - geoserver是Go软件包,用于通过GeoServer REST API操纵GeoServer实例。
  • gismanager - 将 GIS数据(矢量数据)发布到PostGIS和Geoserver。
  • osm - 用于读取,编写和使用OpenStreetMap数据和API的库。
  • pbf - OpenStreetMap PBF golang编码器/解码器。
  • S2 geometry - Go中的S2几何库。
  • Tile38 - 具有空间索引和实时地理围栏的地理位置数据库。
  • WGS84 - 库坐标转换和变换(ETRS89,OSGB36,NAD83,RGF93,网络墨卡托UTM)。

编译器

  • c4go - 将C代码转换为Go代码。
  • f4go - 将FORTRAN 77代码转换为Go代码。
  • gopherjs - 从Go到JavaScript的编译器。
  • llgo - Go的基于LLVM的编译器。
  • tardisgo - Golang转换为CPP / CSharp / Java / JavaScript转译器。

Goroutines

  • ants - 用于golang的高性能goroutine池。
  • artifex - Golang使用基于工作程序的分派的简单内存中作业队列。
  • async - 一种异步执行功能的安全方法,以防万一。
  • breaker - 使执行流程可中断的灵活机制。
  • cyclicbarrier - 用于golang的CyclicBarrier。
  • go-floc - 轻松编排goroutine。
  • go-flow - 控制goroutine的执行顺序。
  • go-tools/multithreading - 使用带有简单API的轻量级库管理goroutine池。
  • go-trylock - 支持Golang的读写锁的TryLock。
  • go-waitgroup - sync.WaitGroup与错误处理和并发控制类似。
  • gohive - Go的高性能和易于使用的Goroutine池。
  • gollback - 异步简单函数实用程序,用于管理闭包和回调的执行。
  • GoSlaves - 简单和异步Goroutine池库。
  • goworker - goworker是基于Go的后台工作者。
  • gowp - gowp是并发限制goroutine池。
  • gpool - 管理可调整大小的上下文感知goroutine池以绑定并发。
  • grpool - 轻巧的Goroutine池。
  • Hunch - 预感提供功能,如:All,First,Retry,Waterfall等等,这使得异步流控制更加直观。
  • oversight - 监督是Erlang监督树的完整实现。
  • parallel-fn - 并行运行功能。
  • pool - 有限的消费者goroutine池或无限制的goroutine池,以便更轻松地处理和取消goroutine。
  • queue - 为您提供sync.WaitGroup类似的队列组可访问性。帮助您节流和限制goroutine,等待所有goroutine结束等等。
  • routine - 具有上下文和支持的例程控制:Main,Go,Pool和一些有用的Executors。
  • semaphore - 基于通道和上下文的具有锁定/解锁操作超时的信号量模式实现。
  • semaphore - 基于CAS的快速可调整大小的信号量实现(比基于通道的信号量实现更快)。
  • stl - 基于软件交易内存(STM)并发控制机制的软件交易锁。
  • threadpool - Golang线程池实现。
  • tunny - 线程池golang。
  • worker-pool - goworker是一个简单的Go异步工作池。
  • workerpool - Goroutine池,它限制了任务执行的并发性,而不是排队的任务数。

图形界面

  • app - 打包以使用GO,HTML和CSS创建应用的程序。支持:MacOS,Windows正在开发中。
  • fyne - 为Go设计的跨平台本机GUI,使用EFL呈现。支持:Linux,macOS,Windows。
  • go-astilectron - 使用GO和HTML / JS / CSS(由Electron支持)构建跨平台GUI应用。
  • go-gtk - GTK的绑定。
  • go-sciter - Go绑定:用于现代桌面UI开发的可嵌入HTML / CSS / script引擎。跨平台。
  • gotk3 - GTK3的绑定。
  • gowd - 使用GO,HTML,CSS和NW.js进行快速简单的桌面UI开发。跨平台。
  • qt - Go的Qt绑定(支持Windows / macOS / Linux / Android / iOS / Sailfish OS / Raspberry Pi)。
  • ui - Go的平台本地GUI库。跨平台。
  • Wails - 使用内置OS HTML渲染器的HTML UI的Mac,Windows,Linux桌面应用程序。
  • walk - Go的Windows应用程序库工具包。
  • webview - 具有简单双向JavaScript绑定的跨平台Webview窗口(Windows / macOS / Linux)。
  • go-appindicator - libappindicator3 C库的Go绑定。
  • gosx-notifier - Go的OSX桌面通知库。
  • mac-activity-tracker - OSX库,用于通知计算机上的任何(可插入)活动。
  • mac-sleep-notifier - golang中的OSX睡眠/唤醒通知。
  • robotgo - Go本机跨平台GUI系统自动化。控制鼠标,键盘等。
  • systray - 跨平台的Go库,用于在通知区域中放置图标和菜单。
  • trayhost - 跨平台的Go库,用于在主机操作系统的任务栏中放置一个图标。

图片

  • bild  - 纯Go中图像处理算法的集合。
  • bimg  - 使用libvips进行快速有效的图像处理的小包装。
  • cameron  - Go的头像生成器。
  • canvas  - 将矢量图形转换为PDF,SVG或光栅图像。
  • darkroom  - 具有可变存储后端的图像代理和侧重于速度和弹性的图像处理引擎。
  • geopattern  - 从字符串创建漂亮的生成图像图案。
  • gg  - 纯Go中的2D渲染。
  • gift  - 图像处理过滤器的包装。
  • gltf  - 高效,强大的glTF 2.0读取器,写入器和验证器。
  • go-cairo  - 用于cairo图形库的绑定。
  • go-gd  - GD库的Go绑定。
  • go-nude  - Go的裸露检测。
  • go-opencv  - 用于OpenCV的绑定。
  • go-webcolors  - webcolors库的端口,从Python到Go。
  • gocv  - 使用OpenCV 3.3+进行计算机视觉的Go软件包。
  • goimagehash  - Go感知图像哈希包。
  • goimghdr  - imghdr模块确定Go文件中包含的图像类型。
  • govatar  - 用于生成有趣头像的库和CMD工具。
  • image2ascii  - 将图像转换为ASCII。
  • imagick  - 绑定到ImageMagick的MagickWand C API。
  • imaginary  - 用于图像大小调整的快速,简单的HTTP微服务。
  • imaging  - 简单的Go图像处理包。
  • img  - 选择图像处理工具。
  • ln  - Go中的3D线条艺术渲染。
  • mergi  - 用于图像处理(合并,裁切,调整大小,水印,动画)的Tool&Go库。
  • mort  - 用Go编写的存储和图像处理服务器。
  • mpo  - 用于MPO 3D照片的解码器和转换工具。
  • picfit  - 用Go编写的图像大小调整服务器。
  • pt  - 用Go语言编写的路径跟踪引擎。
  • resize  - 使用常见的插值方法为Go 调整图像大小。
  • rez  - 在纯Go和SIMD中调整图像大小。
  • smartcrop  - 查找适合任何图像和尺寸的优质作物。
  • steganography  - 用于LSB隐写术的Pure Go库。
  • stegify  - 用于LSB隐写术的Go工具,能够隐藏图像中的任何文件。
  • svgo  - 用于SVG生成的Go语言库。
  • tga  - 软件包tga是TARGA图像格式的解码器/编码器。

物联网

  • connectordb  - 量化自我和物联网的开源平台。
  • devices  - IoT设备库套件,针对x / exp / io进行实验。
  • eywa  - Project Eywa本质上是一个连接管理器,用于跟踪连接的设备。
  • flogo  - Project Flogo是一个用于IoT Edge应用和集成的开源框架。
  • gatt  - 盖特是一个围棋包构建低功耗蓝牙外设。
  • gobot  - Gobot是机器人技术,物理计算和物联网的框架。
  • huego  - 适用于Go的飞利浦Hue扩展客户端库。
  • iot  - IoT是用于实现Google IoT Core设备的简单框架。
  • mainflux  - 工业物联网消息和设备管理服务器。
  • periph  - 外设I / O与低级别的主板设备接口。
  • sensorbee  - 用于物联网的轻量级流处理引擎。

JSON格式

  • ajson  - 具有JSONPath支持的golang的抽象JSON。
  • gjo  - 用于创建JSON对象的小型实用程序。
  • GJSON  - 使用一行代码获取JSON值。
  • go-jsonerror  - Go-JsonError可让我们轻松创建遵循JsonApi规范的json响应错误。
  • go-respond  - Go包,用于处理常见的HTTP JSON响应。
  • gojq  - Golang中的 JSON查询。
  • gojson  - 从示例JSON自动生成Go(golang)结构定义。
  • JayDiff  - 用Go编写的JSON diff实用程序。
  • jettison  - 用于Go的高性能,无反射JSON编码器。
  • JSON-to-Go  - 将JSON转换为Go结构。
  • json2go  - 高级JSON到Go结构转换。提供可以解析多个JSON文档并创建适合所有JSON的结构的包。
  • jsonapi-errors  - 根据JSON API错误参考进行绑定。
  • jsonf  - 突出显示格式和获取JSON的结构查询的控制台工具。
  • jsongo  - Fluent API,可以更轻松地创建Json对象。
  • jsonhal  - 简单的Go包,用于将自定义结构编组为HAL兼容的JSON响应。
  • kazaam  - 用于JSON文档的任意转换的API。
  • mp  - 简单的cli电子邮件解析器。当前,它使用标准输入并输出JSON。

机器学习

  • bayesian  - 贝叶斯分类为Golang天真。
  • CloudForest  - 快速,灵活,多线程的决策树集合,用于纯Go中的机器学习。
  • eaopt  - 进化优化库。
  • evoli  - 遗传算法和粒子群优化库。
  • fonet  - 用Go编写的深度神经网络库。
  • go-cluster  - k模式和k-原型聚类算法的Go实现。
  • go-deep  - Go中功能丰富的神经网络库
  • go-fann  - 快速人工神经网络(FANN)库的Go绑定。
  • go-galib  - 用Go / golang编写的遗传算法库。
  • go-pr  - Go lang中的模式识别包。
  • gobrain  - 用go语言编写的神经网络
  • godist  - 各种概率分布及相关方法。
  • goga  - Go的遗传算法库。
  • GoLearn  - 用于Go的通用机器学习库。
  • golinear  - Go的liblinear绑定。
  • GoMind  - Go中的简单神经网络库。
  • goml  - Go中的在线机器学习。
  • Goptuna  - 用于Go语言编写的黑盒函数的贝叶斯优化框架。一切都会被优化。
  • goRecommend  - 用Go编写的推荐算法库。
  • gorgonia  - 基于图形的计算库,例如Theano for Go,它提供了用于构建各种机器学习和神经网络算法的原语。
  • gorse  - 基于Go编写的协作过滤的离线推荐系统后端。
  • goscore  - 用于PMML的Go Scoring API。
  • gosseract  - 使用Tesseract C ++库的OCR(光学字符识别)软件包。
  • libsvm  - 基于LIBSVM 3.14 libsvm的golang版本衍生作品。
  • neat  - 用于增强拓扑神经演化(NEAT)的即插即用,并行Go框架。
  • neural-go  - go-在Go中实现的多层感知器网络,通过反向传播进行训练。
  • ocrserver  - 一个简单的OCR API服务器,非常容易被Docker和Heroku部署。
  • onnx-go  - 转到开放神经网络交换(ONNX)的接口。
  • probab  - 概率分布函数。贝叶斯推断。用纯Go语言编写。
  • regommend  - 建议和协作过滤引擎。
  • shield  - 贝叶斯文本分类器,具有灵活的标记器和Go的存储后端。
  • tfgo  - 易于使用的Tensorflow绑定:简化了官方Tensorflow Go绑定的使用。在Go中定义计算图,加载并执行经过Python训练的模型。
  • Varis  - Golang神经网络。

金融

  • unioffice  - Pure Go库,用于创建和处理Office Word(.docx),Excel(.xlsx)和Powerpoint(.pptx)文档。
  • excelize  - Golang库用于读取和写入Microsoft Excel™(XLSX)文件。
  • go-excel  - 一个简单而轻便的阅读器,可以将类似于related-db的excel读取为表格。
  • goxlsxwriter  - libxlsxwriter的Golang绑定,用于编写XLSX(Microsoft Excel)文件。
  • xlsx  - 用于简化在Go程序中读取Microsoft Excel最新版本使用的XML格式的库。
  • xlsx  - 在Go程序中快速/安全地读取/更新您现有的Microsoft Excel文件的方法。

自然语言处理

  • getlang  - 快速自然语言检测程序包。
  • go-i18n  - 用于处理本地化文本的软件包和一个随附工具。
  • go-mystem  - CGo与Yandex.Mystem的绑定-俄罗斯形态分析仪。
  • go-nlp  - 用于处理离散概率分布的实用程序和其他可用于执行NLP工作的工具。
  • go-pinyin  - CN Hanzi至Hanyu拼音转换器。
  • go-stem  - 搬运程序阻止算法的实现。
  • go-unidecode  - Unicode文本的ASCII音译。
  • go2vec  - 用于word2vec嵌入的阅读器和实用程序功能。
  • gojieba  - 这是一个围棋实施解霸其中中国分词算法。
  • golibstemmer  - 雪球库libstemmer库的绑定,包括porter 2。
  • gotokenizer  - 基于字典和Goram语言的Bigram语言模型的标记器。(现在仅支持中文细分)
  • gounidecode  - Go的Unicode音译器(也称为unidecode)。
  • gse  - 进行有效的文本分割;支持英语,中文,日语等。
  • icu  - CGO结合为ICU4C C库检测和转换功能。保证与版本50.1兼容。
  • kagome  - 用纯Go语言编写的JP形态分析仪。
  • libtextcat  - libtextcat C库的Cgo绑定。保证与2.2版兼容。
  • MMSEGO  - 这是MMSEG的GO实现,它是中文分词算法。
  • nlp  - 从字符串中提取值,并用nlp填充您的结构。
  • nlp  - 支持LSA(潜在语义分析)的自然语言处理库。
  • paicehusk  - Paice / Husk提取算法的Golang实现。
  • petrovich  - 彼得罗维奇(Petrovich)是库,在给定的语法情况下使用俄语名称。
  • porter  - 这是Martin Porter的Porter干算法的C实现的相当简单的移植。
  • porter2  - 非常快的Porter 2 提取器。
  • prose  - 用于文本处理的库,支持标记化,词性标记,命名实体提取等。仅限英语。
  • RAKE.go  - 快速自动关键字提取算法(RAKE)的Go端口。
  • segment  - 用于执行Unicode标准附件#29中所述的Unicode文本分段的Go库
  • sentences  - 句子标记器:将文本转换为句子列表。
  • shamoji  - shamoji是用Go编写的单词过滤程序包。
  • snowball  - Go的雪球茎端口(cgo包装器)。提供单词词干提取功能Snowball本机。
  • stemmer  - 用于Go编程语言的Stemmer软件包。包括英语和德语词干。
  • textcat  - Go软件包,用于基于n-gram的文本分类,并支持utf-8和原始文本。
  • whatlanggo  - Go的自然语言检测程序包。支持84种语言和24种脚本(书写系统,例如拉丁语,西里尔字母等)。
  • when  - 自然EN和RU语言日期/时间分析器具有可插拔的规则。

网络

  • arp - 包arp实现ARP协议,如RFC 826中所述。
  • buffstreams  - 通过TCP流化协议缓冲区数据变得容易。
  • canopus  - CoAP客户端/服务器实施(RFC 7252)。
  • cidranger  - Go的快速IP到CIDR查找。
  • dhcp6  - 软件包dhcp6实现了DHCPv6服务器,如RFC 3315中所述。
  • dns  - 使用DNS的Go库。
  • ether  - 用于发送和接收以太网帧的跨平台Go软件包。
  • ethernet  - 程序包ethernet实施IEEE 802.3以太网II帧和IEEE 802.1Q VLAN标签的封送处理。
  • fasthttp  - 软件包fasthttp是Go的一种快速HTTP实现,比net / http快10倍。
  • fortio  - 负载测试库和命令行工具,高级回显服务器和Web UI。允许指定设置的每秒查询负载,并记录延迟直方图和其他有用的统计数据并对其进行图形化。Tcp,Http,gRPC。
  • ftp -  程序包ftp实现RFC 959中所述的FTP客户端。
  • gev  - gev是基于Reactor模式的轻量级,快速,无阻塞的TCP网络库。
  • gmqtt  - Gmqtt是一个灵活的高性能MQTT代理库,它完全实现了MQTT协议V3.1.1。
  • gnet  - gnet是一个高性能的,用纯围棋轻便,非阻塞,事件循环网络库。
  • gNxI  - 使用gNMI和gNOI协议的网络管理工具的集合。
  • go-getter  - Go库,用于使用URL从各种来源下载文件或目录。
  • go-powerdns  - Golang的 PowerDNS API绑定。
  • go-stun  - STUN客户端的Go实现(RFC 3489和RFC 5389)。
  • gobgp  - 使用Go编程语言实现的BGP。
  • golibwireshark  - 软件包golibwireshark使用libwireshark库来解码pcap文件并分析解剖数据。
  • gopacket  - Go库,用于使用libpcap绑定进行数据包处理。
  • gopcap  - libpcap的包装器。
  • goshark  - 软件包goshark使用tshark解码IP数据包并创建数据结构以分析数据包。
  • gosnmp  - 用于执行SNMP操作的本机Go库。
  • gosocsvr  - 套接字服务器变得简单。
  • gotcp  - 用于快速编写tcp应用程序的Go软件包。
  • grab  - 用于管理文件下载的软件包。
  • graval  - 实验性FTP服务器框架。
  • HTTPLab  - HTTPLabs可让您检查HTTP请求并伪造响应。
  • iplib  - 受python ipaddress和ruby ipaddr启发而使用IP地址(net.IP,net.IPNet)的库
  • jazigo  - Jazigo是用Go语言编写的工具,用于检索多个网络设备的配置。
  • kcp-go  - KCP-快速可靠的ARQ协议。
  • kcptun  - 基于KCP协议的极其简单和快速的udp隧道。
  • lhttp  - 强大的websocket框架,可更轻松地构建IM服务器。
  • linkio  - 用于读取器/写入器接口的网络链接速度模拟。
  • llb  - 这是代理服务器的非常简单但快速的后端。对于零内存分配和快速响应的快速重定向到预定义域很有用。
  • mdns  - Golang中的简单mDNS(多播DNS)客户端/服务器库。
  • mqttPaho  - Paho Go客户端提供了一个MQTT客户端库,用于通过TCP,TLS或WebSockets连接到MQTT代理。
  • NFF-Go  - 用于快速开发云和裸机(以前的YANFF)的高性能网络功能的框架。
  • packet  - 通过TCP和UDP发送数据包。如果需要,它可以缓冲消息和热交换连接。
  • peerdiscovery  - Pure Go库,用于使用UDP多播的跨平台本地对等发现。
  • portproxy  - 简单的TCP代理,它将不支持它的API添加到CORS支持中。
  • publicip  - 软件包publicip返回您的面向公众的IPv4地址(互联网出口)。
  • quic-go  - 在纯Go中实现QUIC协议。
  • raw  - 包raw允许在设备驱动程序级别为网络接口读取和写入数据。
  • sftp  - 程序包sftp实现SSH文件传输协议,如https://filezilla-project.org/specs/draft-ietf-secsh-filexfer-02.txt
  • ssh  - 用于构建SSH服务器的高级API(包装crypto / ssh)。
  • sslb  - 这是一个超级简单的负载均衡器,只是一个实现某种性能的小项目。
  • stun  - 实施RFC 5389 STUN协议。
  • tcp_server  - 用于更快地构建tcp服务器的Go库。
  • tspool  - TCP库使用工作池来提高性能并保护您的服务器。
  • utp  - 围棋UTP微传输协议的实现。
  • water  - 简单的TUN / TAP库。
  • webrtc  - WebRTC API的纯Go实现。
  • winrm  - 进入WinRM客户端以在Windows计算机上远程执行命令。
  • xtcp  - 具有同步全双工通信,安全关闭,自定义协议的TCP Server Framework。

视频

  • go-astisub  - 在GO中处理字幕(.srt,.stl,.ttml,.webvtt,.ssa / .ass,图文电视,.smi等)。
  • go-astits  - 在GO中本地解析和解复用MPEG传输流(.ts)。
  • go-m3u8  - Apple m3u8播放列表的解析器和生成器库。
  • goav  - FFmpeg的综合Go绑定。
  • gst  - GStreamer的绑定。
  • libgosubs  - go的字幕格式支持。支持.srt,.ttml和.ass。
  • libvlc-go  - libvlc 2.X / 3.X / 4.X的绑定(由VLC媒体播放器使用)。
  • m3u8  - Apple HLS的M3U8播放列表的解析器和生成器库。
  • v4l  - 用Go编写的Linux视频捕获库。

开源书籍

视频网课

外链问题,到github项目里自取吧哈哈哈。
<!-- 关注公众号 回复【教程】即可在知识的海洋里呛水。 -->






查看原文

赞 12 收藏 8 评论 0

hellcox 关注了标签 · 4月7日

golang

Go语言是谷歌2009发布的第二款开源编程语言。Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。Go是谷歌2009发布的第二款编程语言。

七牛云存储CEO许式伟出版《Go语言编程
go语言翻译项目 http://code.google.com/p/gola...
《go编程导读》 http://code.google.com/p/ac-m...
golang的官方文档 http://golang.org/doc/docs.html
golang windows上安装 http://code.google.com/p/gomi...

关注 26301

hellcox 发布了文章 · 4月7日

REDIS自增INCR设置过期时间的原子操作(LUA&PHP实现)

redis的自增操作没有原生的设置过期时间,只能先自增然后通过expire设置过期时间,若出现特殊情况导致设置过期时间失败,则会导致业务错误。

下面是基于PHP和LUA脚本编写一个DEMO,使自增和过期时间成为原子操作,从而避免上述问题。

<?php
$redis = new Redis();
$result = $redis->connect('127.0.0.1');

$lua =  <<<LUA
        local key,ttl=KEYS[1],KEYS[2]

        if redis.call('EXISTS',key)==0 then  
          redis.call('SETEX',key,ttl,1)
          return 1
        else
          return tonumber(redis.call('INCR',key))
        end
LUA;


$sequence = $redis->eval($lua,["test",10],2); // eval函数请查询官方说明文档
var_dump("RES:".$sequence);
$error = $redis->getLastError();
if($error){
    var_dump($error);
}
var_dump("VAL:".$redis->get("test"));
var_dump("TTL:".$redis->ttl("test"));

查看原文

赞 0 收藏 0 评论 0

hellcox 回答了问题 · 2019-10-31

redis pconnect 的 select db 问题

$r2 = new Redis();
这行代码之前就把$r1->get('a')取出来

关注 5 回答 2

hellcox 收藏了文章 · 2019-07-19

一套基础自动化部署搭建过程

问题背景

公司初创技术团队,没有任何基础设施的情况下,需要搭建一系列code管理以及自动化部署等工具....所以
引发了下面一系列的部署过程,历时两天,中间也是碰到各种问题,但最终把基本工具全部搭建成功,耶~,下面带大家一起看下此次搭建过程。

资源

服务器一台,CentOS的,公司就给了一台配置较低的服务器当临时服务器,没办法了,就这么搞吧。

思考:如果我用传统的yum来安装,肯定会被我装乱七八糟,还不方便自己管理维护,左右为难的情况下我选择了Dokcer,可能有些小伙伴问Docker是啥怎么用,不要慌这里有传送门:Linux docker-compose 实战[进阶篇]docker编排PHP开发坏境

测试环境搭建

图片描述


为了快速搭建一套PHP测试环境我决定用laradock了,虽然文件很多,但是里面封装的东西也是比较全的,后期开发不知道会用到什么技术,就决定先用这个,随时可以启动用得到的服务。
laradock官方文档给的介绍也很全面,我这里采用的方式是部署多套项目方式目录结构如下:

+ laradock
+ project-1
+ project-2

开始使用:

  1. git clone https://github.com/laradock/l...
  2. cp env-example .env

    env 里面的配置可以修改的,可以根据自己情况进行调整
  3. docker-compose up -d nginx php-fpm mysql redis

    后面可以加上你要启动的程序,像rabbitmq、mongo等等,需要的时候追加在尾部就可以启动,首次启动时间有点长
  4. docker-compose exec --user=laradock workspace bash

    像laravel等项目肯定少不了composer,执行这个命令进入工作区,就可以执行composer了
  5. docker-compose exec nginx nginx -s reload

    肯定有人会问我更改了nginx配置是不是每次都要进入nginx容器去重启,或者把整个容器都重启了呀,不用的,执行这个命令就可以重启nginx了。nginx站点配置文件在哪里呢:./laradock/nginx/sites/

先运行下试试吧。

GitLab

现在运行环境已经搭建好了,我代码应该怎么存放呢,其实有很多的选择,要根据自己的实际情况出发,如:GitHub、码云、GitLab等等,我选择的是GitLab,刚开始没有发现laradock其实提供了GitLab服务。。只能自己折腾了,其实很简单。

docker \
run -d  \
-p 443:443 \
-p 8080:80 \
-p 222:22 \
--name gitlab \
--restart always \
-v /home/gitlab/config:/etc/gitlab \
-v /home/gitlab/logs:/var/log/gitlab \
-v /home/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce
#参数解释:
#-d:让容器后台运行
#-p:暴露端口,把容器的443端口指向到宿主机443端口,宿主机8080->容器80,宿主机222->容器22
#宿主机端口可以根据自己的情况自己定制
#-name 给你的容器起个名,只要不和现有的重复就可以
#--restart 当容器退出时docker是否重启
#-v 这就是挂载磁盘了,把宿主机的目录挂载到容器中,这么做哪怕是容器坏了我的内容也不会丢失。
#宿主机/home/gitlab/config目录挂载到容器中/etc/gitlab目录,宿主机目录根据自己情况定
#gitlab/gitlab-ce 这个就是要启动的镜像,如果镜像不存在,docker会自动下载最新版

容器启动成功之后会有一段时间来启动GitLab,看到启动成功立马访问是访问不到的,稍微等一下就可以了,配置文件都在你指定的宿主机目录下可以修改,需要修改的内容如下:

  gitlab_rails['gitlab_ssh_host'] = '宿主机IP'#宿主机的IP地址
  gitlab_rails['gitlab_shell_ssh_port'] = 222#暴露给宿主机的ssh端口
  external_url '域名'#分配给gitlab的域名,可以用nginx做反向代理到8080端口

Jenkins

实现自动化部署有很多种方式如:webhook、Jenkins、Travis CI等等,我的选择是Jenkins,因为之前部署用过所以这里依旧用了这个,laradock依旧提供了Jenkins服务,又是因为没发现自己搭建了一个。。。看来下次要先多看看在动手了。

docker run -d \
     --name myjenkins \
     -p 8181:8080 \
     -p 50000:50000 \
     -v /home/jenkins/:/var/jenkins_home \
     jenkins/jenkins
     #参数解释
     #-d:让容器后台运行
     #-p:暴露端口,宿主机8181->容器8080,宿主机50000->容器50000
     #-v 这就是挂载磁盘了,把宿主机的目录挂载到容器中,这么做哪怕是容器坏了我的内容也不会丢失。
     #宿主机/home/jenkins/目录挂载到容器中/var/jenkins_home目录,宿主机目录根据自己情况定

是不是也很简单~。~ ,但是Jenkins安装成功后会有一个初始化密码,怎么查看初始化密码呢,有两种方式:

#第一种方式
docker logs <你的容器名字> #这样就可以查看容器输出的内容
#第二种方式
cat /home/jenkins/secrets/initialAdminPassword#这里好的/home/jenkins需要替换成你挂载的目录

jenkins配置

初始化

clipboard.png

输入你上面获取到的初始化密码,下一步我选择的是推荐安装,后面自己需要的自己可以再去插件库安装。

插件安装

初始化成功之后前往系统设置->插件管理安装几个必要插件:

Publish Over SSH

GitLab Plugin #因为是使用的Gitlab所以要安装这个

NodeJS Plugin #我们前端使用的Vue所以要用到node

开始征程

一、基础配置

安装完插件之后需要配置一些基础内容如jdk、node、ssh等

  • ssh安装

进入:Manage Jenkins-> Configure System

clipboard.png

点击高级:

clipboard.png

点击Test Configuration测试是否连接成功


  • jdk、git

进入:Manage Jenkins-> Global Tool Configuration

clipboard.png

我这里jdk、git采用自动安装,jdk安装时候需要一个账号,去注册下就可以
  • nodejs安装

clipboard.png
]

二、创建工程

clipboard.png

  1. 新建一个工程
  2. 选择自由风格

三、配置工程

clipboard.png

设置最多保留几个版本构建

clipboard.png

使用git源码工具,输入git地址、添加git用户

clipboard.png

if [ -f "test.tar.gz" ];then
rm testv.tar.gz
fi
tar -zcvf test.tar.gz ./*
这里为什么要把项目打包呢,因为下面要配置的ssh不支持文件夹传输,所以需要先将内容进行打包然后去服务器进行解包

clipboard.png

全部保存好就可以去构建了。耶~

谢谢观赏

长时间没写文章了,这个篇幅较长,谢谢耐心观看,希望对您有所帮助,也希望大家提供下不同的意见,找到更有效的方式来完成,谢谢!

查看原文

hellcox 收藏了文章 · 2019-01-18

三年半Java后端面试经历

经过半年的沉淀,加上对MySQL,redis和分布式这块的补齐,终于开始重拾面试信心,再次出征。

鹅厂

面试职位:go后端开发工程师,接受从Java转语言

都知道鹅厂是cpp的主战场,而以cpp为背景的工程师大都对os,network这块要求特别高,不像是Java这种偏重业务层的语言,之前面试Java的公司侧重还是在数据结构、网络、框架、数据库和分布式。所以OS这块吃的亏比较大

一面基础技术面

电话面试,随便问了些技术问题,最后还问了个LeetCode里面medium级别的算法题,偏简单

  1. redis有没有用过,常用的数据结构以及在业务中使用的场景,redis的hash怎么实现的,rehash过程讲一下和JavaHashMap的rehash有什么区别?redis cluster有没有了解过,怎么做到高可用的?redis的持久化机制,为啥不能用redis做专门的持久化数据库存储?
  2. 了不了解tcp/udp,说下两者的定义,tcp为什么要三次握手和四次挥手?tcp怎么保证有序传输的,讲下tcp的快速重传和拥塞机制,知不知道time_wait状态,这个状态出现在什么地方,有什么用?(参考quic)
  3. 知道udp是不可靠的传输,如果你来设计一个基于udp差不多可靠的算法,怎么设计?
  4. http与https有啥区别?说下https解决了什么问题,怎么解决的?说下https的握手过程。
  5. 看你项目里面用了etcd,讲解下etcd干什么用的,怎么保证高可用和一致性?
  6. 既然你提到了raft算法,讲下raft算法的基本流程?raft算法里面如果出现脑裂怎么处理?有没有了解过paxos和zookeeper的zab算法,他们之前有啥区别?
  7. 你们后端用什么数据库做持久化的?有没有用到分库分表,怎么做的?
  8. 索引的常见实现方式有哪些,有哪些区别?MySQL的存储引擎有哪些,有哪些区别?InnoDB使用的是什么方式实现索引,怎么实现的?说下聚簇索引和非聚簇索引的区别?
  9. 有没有了解过协程?说下协程和线程的区别?
  10. 算法题一个,剑指offer第51题,数组中的重复数字?

自己的回答情况,redis这块没啥问题,具体rehash有印象是渐进式的,但是具体原理可能答的有点出入。tcp的time_wait这块答的不是很好,之前没有了解过quic机制的实现,所以问可靠性udp的时候,基本上脑子里就照着tcp的实现在说。https这块没啥说的,之前项目里面有用到类似的东西,研究的比较清楚了。raft算法这个因为刚好在刷6.824(才刷到lab2。。。),答的也凑合,不过paxos和zab算法确实不熟悉,直接说不会。MySQL这块很熟了,包括索引,锁,事务机制以及mvcc等等,没啥说的,都已经补齐了。协程和线程,主要说了go程和Java线程的区别以及go程的调度模型。面试官提示没有提到线程的有内核态的切换,go程只在用户态调度。最后一个算法题,首先说使用HashMap来做,说空间复杂度能不能降到O(1),后面想了大概5min才想出来原地置换的思路。

二面项目技术面
  1. 主要针对自己最熟悉的项目,画出项目的架构图,主要的数据表结构,项目中使用到的技术点,项目的总峰值qps,时延,以及有没有分析过时延出现的耗时分别出现在什么地方,项目有啥改进的地方没有?
  2. 如果请求出现问题没有响应,如何定位问题,说下思路?
  3. tcp 粘包问题怎么处理?
  4. 问了下缓存更新的模式,以及会出现的问题和应对思路?
  5. 除了公司项目之外,业务有没有研究过知名项目或做出过贡献?

基本都没有啥问题,除了面试官说项目经验稍弱之外,其余还不错。

三面综合技术面

这面面的是阵脚大乱,面试官采用刨根问底的方式提问,终究是面试经验不够,导致面试的节奏有点乱。 举个例子:

其中有个题是go程和线程有什么区别?
答:1 起一个go程大概只需要4kb的内存,起一个Java线程需要1.5MB的内存;go程的调度在用户态非常轻量,Java线程的切换成本比较高。接着问为啥成本比较高?因为Java线程的调度需要在用户态和内核态切换所以成本高?为啥在用户态和内核态之间切换调度成本比较高?简单说了下内核态和用户态的定义。接着问,还是没有明白为啥成本高?心里瞬间崩溃,没完没了了呀,OS这块依旧是痛呀,支支吾吾半天放弃了。

后面所有的提问都是这种模式,结果回答的节奏全无,感觉被套路了。大多度都能回答个一二甚至是一二三,但是再往后或者再深入的OS层面就GG了。

后面问了下项目过程中遇到的最大的挑战,以及时怎么解决的?

后面还问了一个问题定位的问题,服务器CPU 100%怎么定位?可能是由于平时定位业务问题的思维定势,加之处于蒙蔽状态,随口就是:先查看监控面板看有无突发流量异常,接着查看业务日志是否有异常,针对CPU100%那个时间段,取一个典型业务流程的日志查看。最后才提到使用top命令来监控看是哪个进程占用到100%。果然阵脚大乱,张口就来,捂脸。。。
本来正确的思路应该是先用top定位出问题的进程,再用top定位到出问题的线程,再打印线程堆栈查看运行情况,这个流程换平时肯定能答出来,但是,但是没有但是。还是得好好总结。

最后问了一个系统设计题目(朋友圈的设计),白板上面画出系统的架构图,主要的表结构和讲解主要的业务流程,如果用户变多流量变大,架构将怎么扩展,怎样应对?
这个答的也有点乱,直接上来自顾自的用了一个通用的架构,感觉毫无亮点。后面反思应该先定位业务的特点,这个业务明显是读多写少,然后和面试官沟通一期刚开始的方案的用户量,性能要求,单机目标qps是什么等等?在明确系统的特点和约束之后再来设计,而不是一开始就是用典型互联网的那种通用架构自顾自己搞自己的方案。

3天后收到短信被拒

总结
  1. tcp/udp,http和https还有网络这块(各种网络模型,已经select,poll和epoll)一定要非常熟悉
  2. 一定要有拿的出手的项目经验,而且要能够讲清楚,讲清楚项目中取舍,设计模型和数据表
  3. 分布式要非常熟悉
  4. 常见问题定位一定要有思路
  5. 操作系统,还是操作系统,重要的事情说三遍
  6. 系统设计,思路,思路,思路,一定要思路清晰,一定要总结下系统设计的流程
  7. 一点很重要的心得,平时blog和专栏看的再多,如果没有自己的思考不过是过眼云烟,根本不会成为自己的东西,就像内核态和用户态,平常也看过,但是没细想,突然要自己说,还真说不出来,这就很尴尬了。勿以浮沙筑高台,基础这种东西还是需要时间去慢慢打牢,多去思考和总结。

相关资料补充学习:

  1. 系统设计入门
  2. 系统设计典型问题的思考
  3. 协程的好处有哪些
  4. Golang的goroutine是怎么实现的?
  5. Context-Switch
  6. 从Java视角理解系统结构(一)CPU上下文切换

某东南亚互联网公司

一面技术面

先笔试算法题,LeetCode medium难度,然后综合问了下腾讯一面二面类似的问题+一个最熟悉的项目

二面研发经理综合面试

综合聊了下熟悉的技术,遇到了最难的问题,讲解一下项目的流程和架构

查看原文

hellcox 关注了标签 · 2017-04-26

linux

Linux是一种自由和开放源代码的类Unix计算机操作系统。目前存在着许多不同的Linux,但它们全都使用了Linux内核。Linux可安装在各种各样的计算机硬件设备,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机,大型机和超级计算机。

Linux家族家谱图,很全很强大!! 图中可以清楚的看出各个Linux发行版的血缘关系。无水印原图:http://url.cn/5ONhQb

关注 79730

hellcox 关注了标签 · 2017-04-26

memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

关注 964

hellcox 关注了标签 · 2017-04-26

mongodb

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

关注 10247

认证与成就

  • 获得 0 次点赞
  • 获得 3 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 3 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2016-11-11
个人主页被 319 人浏览