V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  gratonos  ›  全部回复第 1 页 / 共 1 页
回复总数  19
可以参考一下我这篇文章:
@lujiaxing 感谢回复。我是做后端开发的,这些方向我能适配的还是比较少
@jones2000 最近几年主要写 Go ,看来不应该自降门槛
@www5070504 @litguy 感谢,我去了解一下
@lujiaxing @yanzhiling2001 .NET Core 前两年专门学了,感觉是挺不错的,C#的设计也比较中意,就是感觉在国内应用领域相对狭窄,而且做长期技术积累性价比不是特别高(了解不深,可能理解有误)
@julyclyde 之前挺想尝试 MS ,但是帝都魔都苏州都有,就是深圳没有
@zzzmh 早几年还能比较随意,年龄一上来换工作、提要求难度就明显大了
@janus77 rust 这块我也比较有兴趣
@djoiwhud 现实很残酷
@xsen 感谢,说的很详细
@julyclyde 深圳的外企感觉比帝都和魔都少许多
@charlie21 我个人看法是:有管理手段,但是还不能和管理水平高划等号。隔壁组倒是有真正高水平的 leader
@Chell 985 本科,感觉不是很好看
@lydhr 这个方向挺适合积累的,就是不知道岗位需求量和转岗难易度怎么样
@microxiaoxiao 嗯,这里提问就是想了解一些自己没了解到的一些方向,多方面考虑一下
@shijingshijing 嵌入式和远程确实互斥性比较高。金融感觉是一个不错的方向
且不说题目本身的意义,只说楼主给的答案实现方式,我觉得太过于依赖语言的“隐式”特性,且过于追求代码简短,可读性并不好。实现效率也先暂不讨论。以下是我参考楼主的答案,实现的我认为可读性更高的版本,即使不熟悉 JS 的程序员也应该能理解(注:本人不是 JS 程序员,见笑):

``` javascript
function add(a, b) {
const count = Math.max(a.length, b.length);
let array = new Array(count);
let carry = 0;
for (let n = 1; n <= count; n++) {
const left = Number(a[a.length - n] || '0');
const right = Number(b[b.length - n] || '0');
const sum = left + right + carry;
array[array.length - n] = String(sum % 10);
carry = Math.floor(sum / 10);
}
const res = array.join('');
return carry > 0 ? '1' + res : res;
}
```
2019-01-23 16:19:30 +08:00
回复了 gratonos 创建的主题 分享创造 给!这是不是你想要的 Golang 日志库?
补充一下标准库 log 的性能作为对比

环境:同上
Flags:LstdFlags | Llongfile | Lmicroseconds
单条日志:消息负载 146 字节,总长度 234 (算上换行)
调用:log.Println
备注:gxlog 为了支持异步,每条日志都需要分配一个 buf,标准库 log 不支持异步,buf 为 log 对象的一个字段,无需重复分配。
写入 /dev/null 性能:每秒 36-37 万条日志
写入文件性能:每秒 24-25 万条日志
2019-01-23 10:28:42 +08:00
回复了 gratonos 创建的主题 分享创造 给!这是不是你想要的 Golang 日志库?
简单测试,仅供参考

硬件:小米 air13
系统:Win10 上 VirtualBox 虚拟的 Linuxmint18
Go:go1.11.4
单条日志:消息负载 120 字节,上下文一对键值,无 mark,无 prefix,无染色,总长度 234 (算上换行)
写入 /dev/null 性能( go run bench.go 2>/dev/null ):每秒 23-24 万条日志
写入文件性能( go run bench.go 2> log.txt ):每秒 16-17 万条日志

不获取运行时(文件、行号等),手动改了实现代码,新版本中会加入 Flag 控制:
写入 /dev/null 性能:每秒 37-38 万条日志
写入文件性能:每秒 24-25 万条日志

参考测试代码:
package main

import (
"fmt"
"time"

"github.com/gxlog/gxlog"
)

func main() {
msg := "012345678901234567890123456789012345678901234567890123456789" +
"012345678901234567890123456789012345678901234567890123456789"
log := gxlog.Logger().WithContext("k1", "v1")

now := time.Now()
for i := 0; i < 200000; i++ {
log.Trace(msg)
}
fmt.Println("costs:", time.Since(now))
}
2019-01-23 10:28:09 +08:00
回复了 gratonos 创建的主题 分享创造 给!这是不是你想要的 Golang 日志库?
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1819 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 12:39 · PVG 20:39 · LAX 04:39 · JFK 07:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.