V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  CRVV  ›  全部回复第 12 页 / 共 27 页
回复总数  536
1 ... 8  9  10  11  12  13  14  15  16  17 ... 27  
2020-09-22 11:04:51 +08:00
回复了 786375312123 创建的主题 程序员 一个弱值的问题,读的成本比写低多少?
https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=vmovdqu&techs=AVX&expand=5655,3418

单纯回答这个问题的话,随便找一对 load 和 store 指令看文档就好了
所以不同的处理器上不一样,Intel 架构上 load store 指令有一大堆,估计这个数字还会各不相同。
上面链接里的这一对指令,在 Icelake 上是 store 的开销比 load 小

当然,以上回答其实没有意义,因为如一楼所说这个数字没有用。

不过,如果你要做的是一个并发的系统,可能是 cpu core 并行工作,也可能是你部署了一个集群来处理请求。
那么, 在很多情况下,最后系统的瓶颈是在对同一个位置的写操作上。
比如 atomic counter,不论是 cpu 上实现的还是 Redis 实现的,这个写操作都不可能被无限扩展,在 cpu core 足够多或者并发请求足够多的时候就会成为瓶颈。

所以,通常情况下,设计架构 /算法时,会让写操作少一些。
2020-09-17 13:07:52 +08:00
回复了 Ikhi 创建的主题 酷工作 [小年糕] 远程办公不打卡, go 语言开发算法测试内推
第一次到要求把工作年限写到邮件标题上的,这么关注工作年限的话,你和普通的 HR 就是一回事呗,还搞什么内推
2020-09-06 22:48:39 +08:00
回复了 amiwrong123 创建的主题 MySQL mysql 必知必会的多表联结问题?
SQL 是声明式语言而不是命令式语言,也就是你把自己需要什么数据告诉数据库,然后数据库把数据取出来,至于是怎么取的,那是数据库内部的事情,不是用 SQL 写出来的。
写 SQL 的点在于用精确简洁的方式描述清楚你到底要什么数据,比如前一种写法就很好了。

虽然这么说,当然存在换一个写法能让查询变快的方法,但是这种事情并不那么常见。
如果真要做优化,你把两句分别跑一下,如果变快了就是更好了。
2020-09-03 19:50:12 +08:00
回复了 TheWalkingDead 创建的主题 程序员 刚听闻一老家亲戚可能得癌症后,对 X 漂一族的思考。
只要是不太好治的病,在北上广的大医院治比在小地方(包括很多大的省会城市)医院治好的概率大得多。
在上一行里说的大的省会城市的医院里治,也比更小的什么县城医院里治好的概率大得多。
2020-08-31 21:17:16 +08:00
回复了 JasonLaw 创建的主题 Java 关于 StackOverflowError 和 OutOfMemoryError 的疑惑
从回复来看,这个书只是翻译了 Java 文档而已。

然后这个文档是 Java Virtual Machine Specifications,它是定义 JVM 的文档,而不是描述 Oracle JVM 工作方式的文档。
这个文档当然没有写错,但它确实写成了一个不太好懂的方式。当然了这个文档有 600 多页,也不是给初学者看的。

把有疑问的内容都粘过来,是这样的

This specification permits Java Virtual Machine stacks either to be of a fixed size or to dynamically expand and contract as required by the computation. If the Java Virtual Machine stacks are of a fixed size, the size of each Java Virtual Machine stack may be chosen independently when that stack is created.

A Java Virtual Machine implementation may provide the programmer or the user control over the initial size of Java Virtual Machine stacks, as well as, in the case of dynamically expanding or contracting Java Virtual Machine stacks, control over the maximum and minimum sizes.

The following exceptional conditions are associated with Java Virtual Machine stacks:

If the computation in a thread requires a larger Java Virtual Machine stack than is permitted, the Java Virtual Machine throws a StackOverflowError.

If Java Virtual Machine stacks can be dynamically expanded, and expansion is attempted but insufficient memory can be made available to effect the expansion, or if insufficient memory can be made available to create the initial Java Virtual Machine stack for a new thread, the Java Virtual Machine throws an OutOfMemoryError.


所以,
这里有两种情况,分别是 fixed sized 的栈和可以 dynamically expanding 的栈。
maximum depth of the java call stack
对 fixed 的栈来说,那显然是它的初始大小,因为它不能变。
对 dynamical 的栈来说,那显然是它的 maximum size,在第二段里提到了。

后面那个 OutOfMemoryError 的前提是 dynamical 的栈,所以就是 expand stack 的时候,内存不够了报的错。

Oracle JVM 的栈是 fixed sized,-Xss 是在设定栈的大小,也就是第二段里说的 initial size of Java Virtual Machine stacks,它和这个 OutOfMemoryError 毫无关系。
2020-08-25 13:47:59 +08:00
回复了 solxnp 创建的主题 Go 编程语言 请教下反射后类型转换的问题
https://golang.org/pkg/reflect/#Value.Interface

f := Value.Interface().(func())
f()

也许能用,我没试
2020-08-25 13:29:06 +08:00
回复了 adoula 创建的主题 程序员 有人知道在深圳买车怎么上老家牌吗,需要把车开回去吗
@z775781
@Wongz

我印象中通常不会把车开走的,来路不正的车要销脏也不容易。
主要的风险是路上出事,比如撞死了人,这个赔偿可能需要车主来付。
@wizardoz

struct 里面的 field 都会 self-align,把 int b 放到 char a 前面,char c 就不会 align 到 4 bytes 上了。
只取最大的一条可以不用 JOIN

SELECT Persons.LastName, Persons.FirstName,
(SELECT max(OrderNo) FROM Orders WHERE Orders.Id_P = Persons.Id_P) AS OrderNo
FROM Persons;

如果要取最大的两条,就得用 2 楼的方法

也可以用 window function,MySQL 8 支持了
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

fwrite 的第一个参数明明是 const void* 类型

直接
uint32_t x;
fwrite(&x, 4, ...)
应该就能用

另外,没有理解楼主说的 对齐 是指什么,如果从头开始写,每次写 4 bytes,那当然是对齐到 4 bytes 上的
2020-08-12 16:23:51 +08:00
回复了 miniyao 创建的主题 Python Flask-SQLAlchemy 更新(update) 数据,还有必要 db.session.add(foo) 吗?
https://docs.sqlalchemy.org/en/13/orm/tutorial.html#adding-and-updating-objects

文档里写得很清楚,不用 add
add 的作用是 adding object,updating object 不用 add
2020-07-20 13:15:11 +08:00
回复了 ninblue 创建的主题 MySQL 想问问 mysql 要怎么优化才能做到支持每秒一亿并发
@ninblue
不引入缓存,需要强一致性,意味着每一个减一都是一个事务。
每个事务都要求把修改写入硬盘。
你需要一个支持至少 1 亿 iops 的硬盘,显然这样的硬盘不存在。
当然可以用更复杂的方法把储存系统搞到支持 1 亿 iops 。但我这里要说的意思是,这个不是怎么优化 MySQL,而是整个系统的每一部分都需要优化。
至于能不能到 1 亿,如果钱给够,也许可以吧。
2020-07-18 07:07:38 +08:00
回复了 Sonia96 创建的主题 求职 化学自学转行,求各位批改简历!
pku 的化学直博可以四年拿硕士学位的吧,我印象中几乎没有要求,没有文章都行。
然后可以用剩下的时间多学些东西,正常找实习之类的,到毕业那年当应届生找工作。这样比退学好多了。

真要转行的话,即使是只做算法,我认为基础的四门课应该要学完,数据结构和算法,操作系统,网络,计算机体系结构。相当于普通化学分析化学有机化学物理化学这种东西。
2020-07-16 12:25:44 +08:00
回复了 tlerbao 创建的主题 git 开源项目可以 Fork 成私有库吗?然后私有库可以提交 PR 吗?
到 GitHub 的仓库设置里面,如果是一个 fork 来的仓库,会显示 "You cannot change the visibility of a fork. Please duplicate the repository."

所以,开源项目不可以 Fork 成私有库,也没有然后了。

顺便一说,开源项目在闭源项目里用是允许的,包括 GPL 。到 redistribution 也就是再发布软件的时候才有侵权的问题。比如,在不以 GPL 重新发行新代码的情况下,一家公司可以拿 Linux 内核改一改用在自家内部的机器上,但不能拿 Linux 内核改一改然后拿去重新发布(比如拿去卖,比如把代码公开了但是不用 GPL 授权)。
2020-07-13 14:52:48 +08:00
回复了 B910 创建的主题 程序员 现在只会使用 Windows 服务器,是不是落伍了?
1. 说到稳定性,我基本上天天都在用 Arch Linux 和 Windows 10,Arch Linux 基本上一周更新一次内核,系统从来没有彻底挂掉过,小问题当然经常有,输入法不能用这个等级的,等一段时间就修好了。我从来没在 x86 上见过 Linux 的 kernel panic 。
我这里还有台装着最新 Windows 10 的 Surface pro 4,小的 bug 一直有,有一个从我买来到现在也没修好的(整个系统卡住没有响应持续若干秒,连我都知道这个问题要怎么修,但微软就是不修)。我还随时可以让它 kernel panic (连上我手头的一个 ax 路由器,10 分钟之内蓝屏)。

你当然可以说 Windows Server 不是这样的,但我没用过 Windows Server,我只能比较最新的 Linux 和 Windows

2. 这种事情上,你不能说我们那个什么厉害的内部系统,对稳定性要求可高了,就用的是 Windows,这种说法无从考证,你得找大家都能查到的信息。
比如大家都知道的 https://www.top500.org/statistics/list/ 已经 100% Linux 了。
比如我随便搜了一个搞什么工业领域的公司,https://waterfall-security.com/solutions/ ,里面说支持四个数据库,Microsoft SQL Server, Oracle, MySQL, PostgreSQL
MySQL 也没那么不堪吧。
2020-07-04 20:11:08 +08:00
回复了 felix021 创建的主题 推广 Linux 下删点日志也能搞死人
@msg7086

2.
楼主的原文里可没有说要检查文件有没有关,而且楼主还给出了文件没关情况下释放磁盘空间的方法。
你觉得应聘者可以有更高级的回答,那当然是好事。但是楼主作为面试官,他给出的答案就是一股脑删了,而且本来在用的文件,用 rm 不会删除的东西,也被删了。我喷的就是他预期的这个答案。

3.
我的原文是
"在我看来这个文件被占用的答案才是实战经验少,估计是刚毕业吧,因为线上服务的日志都是有人专门管理的,我在公司从来没听说过删日志这个操作,在自己的机器上随便玩倒是经常删。"
被你曲解成了
"事情都甩锅给别人来做说明实战经验多,事情自己来做说明实战经验少"

楼主说删了一个日志文件,磁盘空间没被释放,出现这个情况的原因是这个文件还在被占用。

正式服务器被占用的日志文件不能删,运维不可能在工作中发现,欸我删了一个日志文件怎么磁盘没释放结果是日志文件还在被占用。
有专人管理的意思是说他不能让服务器出现日志把磁盘占满的情况,这都有监控的,快满了要报警,报警了就要解决,这是他的工作。如果都已经磁盘满了需要手动 rm 文件或者 echo> 了,那这系统已经病入膏肓了,这是不能允许出现的情况。不是说现在磁盘满了系统挂了这都是运维的事和我没关系。

你玩过十几年 Linux,知道删除一个被打开的文件不会释放磁盘空间,但你大概率不是通过删日志文件学到这件事情的。
但是,楼主已经给定了线上服务器日志文件管理这个场景,在正常操作服务器的前提下,就已经排除掉了文件没关这种可能性。但还说可能是这样,那我只能说是没经验了。


> 请详细描述如何用不同的方式正确地储存和清理日志

这完全是另外一个问题,楼主原本的问题是 "在 Linux 下,如何删除一个目录下的所有 log 文件?"
如果我看到这个问题,我不可能回答 "请详细描述如何用不同的方式正确地储存和清理日志"。
面试官当然可以问 "请详细描述如何用不同的方式正确地储存和清理日志"。
但如果你想问的是这个问题,然后实际问的是 "在 Linux 下,如何删除一个目录下的所有 log 文件",那这正是我要喷的点。
2020-07-04 19:06:37 +08:00
回复了 felix021 创建的主题 推广 Linux 下删点日志也能搞死人
@msg7086
> 竟然真的有人认为面试的时候问问题是期待别人精确回答?

通常情况下当然不会这么想,但是楼主的原文里面有不少带这种含义的句子。

"令我很意外的是,真的只有很少的应聘者能想到 find 命令"
这里很明白地在表示自己期望别人回答用 find 来查找文件。

3 里面提到说有人回答说可能是删了软链接,这当然是一个正确的回答。

但是楼主随后就断言
"但实际生产上,遇到 “删了 log 文件、但空间不释放” 通常和软 /硬链接没有什么关系。"
明确地否定了这个答案。

"实战经验比较丰富的候选人会知道,这往往是因为 log 文件正被另一个进程打开。"
也就是说回答前面那种答案的人,实战经验少。

在我看来这个文件被占用的答案才是实战经验少,估计是刚毕业吧,因为线上服务的日志都是有人专门管理的,我在公司从来没听说过删日志这个操作,在自己的机器上随便玩倒是经常删。

原文里面有一句 "但如果是线上服务呢?",然后楼主在下面的回帖说是多人共用的开发机,那这完全是两码事。

如果是你可以随便折腾的开发机,那这个问题的很多前提都不成立。另外开发机上的日志可能更重要,也许是同事若干天的劳动成果。

这种问题,要么是开放的随便怎么回答都可以,那么你出的题目就不能有这么明显的局限性。比如你可以问怎样批量进行文件操作,可以问磁盘满了怎么解决。但是不能把情景人为地组合在一起,因为这样组出来的情景就不合逻辑了。
2020-07-04 14:01:17 +08:00
回复了 felix021 创建的主题 推广 Linux 下删点日志也能搞死人
如果我去面试,你问我要怎么删除日志文件把磁盘空间清出来,估计我会回答

journalctl --vacuum-time=30days
2020-07-04 13:51:25 +08:00
回复了 felix021 创建的主题 推广 Linux 下删点日志也能搞死人
https://www.v2ex.com/t/655096

原来是同一个人发的,怪不得又是这种奇怪的面试题。我再来喷一次。

1. 在 Linux 下,如何删除一个目录下的所有 log 文件?

你需要给定什么叫做 log 文件,如果是文件名以 log 结尾的文件,那当然是 rm *log
删子目录是 rm **/*log

日志文件是日志文件,文件名随便是什么都可以;文件名以 log 结尾的文件是文件名以 log 结尾的文件;文件名以 .log 结尾的文件是文件名以 .log 结尾的文件,这都不一样的。真不知道你的 “log 文件” 到底是啥。

2. find 是一个不常用的命令,原因是这个命令的功能通常能被 shell 的 * 或者 ** 代替。
另外 find 功能很强,用法也很复杂,有几十个参数,参数之间有逻辑关系而且还可以套别的命令,如果不是有很特殊的需求,不会来用 find 。而且 GNU find 和 BSD find 的用法还不完全一样。
你给出的那一行 find 命令是错的,少了一个 .
find . -name \*.log -exec rm -f {} \;
这一行也可以写成
IFS=$'\n'; for f in **/*.log; do rm "$f"; done
这个可能是更常见的用法

3. 删了文件磁盘空间不释放这很正常,还有可能是 btrfs 或者 zfs 上给 dedup 了。
有这么多种可能性,我不知道为什么来面试的人就必须要想到是文件还在被占用。

4. 把日志文件删掉了,因为那个文件还在被使用,所以磁盘空间没释放。
我就想问一句,贵司真是这么删日志的么?
正在被打开的日志文件,意思是还有进程在往里面写日志,我想不到有正常的运维会删一个正在被写入的日志文件。
在我的认知里,删日志都是删若干时间之前,肯定不会再用到的老日志。这全新的还在写的日志文件你这么都随便地删掉了,那当初为啥要记这个日志呢?
能被这种神操作理直气壮地出到面试题里面,贵司确实蛮厉害的。
1 ... 8  9  10  11  12  13  14  15  16  17 ... 27  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4880 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 57ms · UTC 09:45 · PVG 17:45 · LAX 02:45 · JFK 05:45
Developed with CodeLauncher
♥ Do have faith in what you're doing.