V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  GuuJiang  ›  全部回复第 11 页 / 共 19 页
回复总数  379
1 ... 3  4  5  6  7  8  9  10  11  12 ... 19  
2021-06-28 13:21:41 +08:00
回复了 fly2mars 创建的主题 问与答 如何声明一个需要位运算的变量? 比如 x & 1 = 1,int x = ??
@fly2mars 虽然你一直没表达清楚,但是可以隐约猜测出来你想要实现的就是要把“满足某种条件的全体元素”这个抽象概念变成一个具体的概念,可以赋值给变量,可以作为参数传递,可以作为返回值返回,这种“把抽象的东西当成具体的东西来传递”的通用做法是使用高阶函数,当然这里我不打算提,否则你会更晕的,具体到你这个例子里,你只需要使用
int x = 1 来表示“全体满足(x&1)!=0 的数”
int x = 2 来表示“全体满足(x&2)!=0 的数”
...
即可,只不过在凡是用到这个变量的地方都要牢记它表示的其实不是一个数而是一个集合,对它能做的运算也只有有限的几种,在只关系集合这个整体的地方,就原样传递这个变量即可,等到了真正需要列举出元素或者测试某个值是否属于这个集合的地方,再使用运算(x&a)!=0
2021-06-28 13:09:27 +08:00
回复了 fly2mars 创建的主题 问与答 如何声明一个需要位运算的变量? 比如 x & 1 = 1,int x = ??
@fly2mars 我觉得你一定是在某个地方存在某种误解
举个例子,x^2=1(此处是指平方而不是异或),那么 x 到底是 1 还是-1
数学上要表达一个函数,既可以用显函数方式 y=f(x),也可以用隐函数方式 F(x, y)=0
诚然,对于单值的情况确实显函数看起来更符合直觉一点,因为人们习惯于“xx 是 xx”这种表达方式,但是对于多值的方式有的时候只能用隐函数(这里对隐函数概念做了推广,严格来说多值的不应该称为函数)
更哲学一点,定义一个东西既可以用内涵定义(某某是什么),也可以用外延定义(满足什么条件的是某某)
你想要的是满足(x&1) != 0 的全体整数,并且试图用一个值来表达这个集合,如果硬要表示出来,那么 x 一定不是一个数而是一个集合{1, 3, 5, 7, 9, ...}在这个场景之下,没有比 1 能更简洁的表达这个集合的方式了,推广一下,用 a 来表达全体满足(x&a)!=0 的整数,或者更形式化点,有个带参函数
F(x,t) => (x & t) != 0
那么每个 t 都表示了一个集合,换言之,你本身已经有了简洁的表达集合的方式,但是试图去找一种更“简洁”的表示方式,本末倒置了
2021-06-28 12:40:50 +08:00
回复了 fly2mars 创建的主题 问与答 如何声明一个需要位运算的变量? 比如 x & 1 = 1,int x = ??
@fly2mars 你要的这个不就是普通的 flag 的组合吗?在你举的这个例子里就是
int x = 1;
2021-06-28 12:19:57 +08:00
回复了 fly2mars 创建的主题 问与答 如何声明一个需要位运算的变量? 比如 x & 1 = 1,int x = ??
直接说你的原始需求吧,不要再在 XY 问题上浪费时间
2021-06-17 16:21:22 +08:00
回复了 rationa1cuzz 创建的主题 问与答 一道需求引发的数学题
71
“每位老师最多评审 50 支团队”这个条件可以等价为每个老师手底下有 50 个苦逼研究生,当需要老师去评审的时候其实是派一个研究生去当枪手,且每个枪手只能用一次,为了结果最大化,采用贪心策略,每当需要一轮评审的时候从剩余研究生数最多的老师里选 7 个成团,于是问题进一步简化为了在一个 10*50 的矩阵里从左到右依次取 7 个元素,不够 7 个时折行,最多能取几次,最终简化成了 500/7
@xuanbg 要不你再好好想想?匹配的是子串,不是子序列
这其实是一个非常有意思的问题,不知道真实的密码锁是怎么实现的,但是假如让我来设计一个密码锁的话,我会采用下面的方案
当设置密码时,将设置的密码编译为一个 AC 自动机(当然由于只有一个关键词,所以实际退化成了 KMP,不过也可以支持多密码),这样每按一个键时实际是在自动机中进行转移,当到达终结状态时就开门,这有个巨大的好处,无论前面输入的无效内容有多长,都不会带来时间和空间上的额外开销,理论上可以支持的无效内容长度没有上限
假设密码锁真的采用了这样的方案,那么确实可以认为是明文存储的,虽然没有直接地存储密码本身,但是获得了完整的自动机等价于获得了密码,不过对于密码锁这种必需要物理接触才能使用的系统来说,直接暴力破坏恐怕都比试图读取存储要容易得多,所以是否明文存储已经不是那么重要了
那要不试试你们心目中的产品之神 telegram 呗?家里的老人,不会发文字,微信只拿来视频用,是直接点击任意一次通话的气泡方便还是选择菜单-“视频通话”方便?至少我用过的 IM 全都是这个逻辑
虽说在 v 站黑张小龙才是政治正确,但这个功能真的没什么黑点吧?系统通讯录的通话记录不也是一样的逻辑?对于一些经常视频很少发文字的联系人来说反而很方便
2021-06-02 20:51:24 +08:00
回复了 zhoudaiyu 创建的主题 问与答 有几个关于 websocket 的疑问想问问大家
@zhoudaiyu 后者
2021-06-02 19:22:20 +08:00
回复了 zhoudaiyu 创建的主题 问与答 有几个关于 websocket 的疑问想问问大家
@zhoudaiyu 你这样一说就明白你的疑惑来自哪里了,实际情况是,发送“握手”使用的那个 http 总得要先有个 tcp 连接对吧,姑且称他为 A,“握手”的请求并不是为了开启一个新的连接 B,而是接着使用 A,只不过在 A 上承载的应用层协议摇身一变切换为了 ws 协议了
2021-06-02 15:41:42 +08:00
回复了 zhoudaiyu 创建的主题 问与答 有几个关于 websocket 的疑问想问问大家
1. 从历史进程来看,websocket 是晚于 http 诞生的,你想象下如果自己就是制定标准的那班哥们,现在面临一个新任务,需要设计一种浏览器能使用的,能够保持连接,且服务端能够主动发送数据的协议,那么你有两种选择,一种是基于 TCP 设计一个全新的协议,一种是看看能否在现有的 http 的基础上 hack 一下完成目标,于是一拍大腿,http 本来就基于 TCP,把这个现成的连接拿来用不就完事了,于是只需要设计出一种方法,通过一个 http 请求让双方都知道“现在我给你发了一个 http 请求,你处理完这个请求后咱们这次请求时使用的那个 TCP 连接先别关,且从现在开始,在这个连接上咱们开始玩一个新的协议,这个协议不如就叫它 ws 协议吧”,这就是第一个 http 请求里的“Connection: Upgrade”干的事,这样有个很大的好处,就是当服务端版本比较旧,还不支持 websocket 时,它收到的仍然是一个合法的 http 请求,只不过忽略了“Connection: Upgrade”而已,这样不会带来什么大的兼容性问题
2. 原因同上
3. 同上,这时候 nginx 相当于个中间人,于是它需要干两件事,一是自己处理“Connection: Upgrade”,将上游到 nginx 的连接切换为 websocket,二是把“Connection: Upgrade”忠实地传递下去,让下游能够处理,从而将 nginx 到下游的连接也切换为 websocket,当存在多级 nginx 时同理,每一级都要正确地完成这两件事,整个链条才能串起来
4. 是可以的,如果做 4 层转发那么上面完全透明,而如果是应用层,就像 nginx 这样,那就需要像上面提到的这样,不光耀转发 Upgrade,同时自己也需要能够响应 Upgrade
5. 在应用层最好不要随便使用“挥手”这个词,以免带来更多的误解,虽然我知道你真正想表达什么,答案也很简单,因为从处理完 Upgrade 那一刻开始,协议已经切换成 websocket 了
2021-05-30 13:18:14 +08:00
回复了 AndyAO 创建的主题 问与答 在 Git 中 pretty 是什么意思?
就是字面意思“好看”啊,对人类友好的展示方案
拿 json 举例,未 pretty 的 json 全部挤在一行,因为计算机解析时只需要标记就够了,而经过 pretty 以后就加入了额外的换行、tab 等排列成我们常见的那个树形格式,换行和 tab 对于解析来说是并不需要的,单纯就是为了让人类更容易看
2021-05-28 09:46:13 +08:00
回复了 coderstory 创建的主题 Java 深夜求助 Java 中 2 个线程怎么互相唤醒和挂起
@coderstory 我来帮你翻译下你的问题吧
你的意思无非就是 B 唤醒 A 以后自己并不是马上进入 wait,而是继续执行,由别的条件来让 B 进入 wait,这段时间 A 和 B 是同时执行的,由此可以推论所有只用一把锁(此处指广义的锁,无论是 synchronized 、j.u.c.Lock 、单 Lock 多 Condition 等)的方案通通都是不可行的,这些方案实现的两个线程互相唤醒的效果从时间线上看都是交替执行,这里顺便纠正一下你以及楼里部分人对 wait/notify 的一个常见误解,并不是说 B 调了 notify/notifyAll 以后 A 就开始执行了,B 调 notify 仅仅是让 A 开始进入锁的竞争,直到 B 进入 wait 、或者结束执行等其它方式离开临界区,A 成功竞争到锁后才真正开始执行的
回到你的问题来,再结合你下面说的应用场景,我觉得这大概率是个 XY 问题,先不说“前端调试后端”这个是否有误入歧途,光说前面这个问题,站在 B 的角度,从宏观上来说,你真的关心在 B 从调了 notify 到 wait 的这段时间 A 是不是真的开始执行了吗?这个对 B 来说理应是作为黑盒无感知的才对,如果你对这个有刚需,非要他们有一段并行的时间,那么一定是哪里出了问题,不要继续花心思在解决 Y 问题上了
2021-05-22 21:01:19 +08:00
回复了 Joeith 创建的主题 iPhone 企业微信有 Callkit 吗?怎样开启
@moooookey 用不用 callkit 唯一的区别就是接听界面是应用内的还是系统的,通话流量都是自己实现,不存在苹果代理这种说法
2021-05-21 15:51:33 +08:00
回复了 qwertyzzz 创建的主题 数据库 这个为什么会使用到索引呀
@qwertyzzz 这里指的是覆盖索引,简单说就是不需要回表,只要你查询的列全都属于索引自然就满足覆盖索引
@iminto 你才是属于以讹传讹吧,明明是你自己理解错误,谁说最左原则指的是在 where 里的顺序了?其实这是个简单的逻辑问题,如果 ABC 的组合是有序的,那么单独取出 AB 或者 A 仍然是有序的,这就是索引能继续发挥作用的原因,但是单独取出 B 、C 、BC 则不再是有序的,索引自然也就起不到作用了,这才是“最左原则”的本质
2021-05-19 16:31:21 +08:00
回复了 lrs 创建的主题 问与答 QUIC 协议基于 UDP, UDP 不可靠, QUIC 如何保证可靠性的呢
@PeakFish ???
2021-05-14 19:43:04 +08:00
回复了 liuchengfeng1 创建的主题 分享创造 请问抖音如何把多个视频分割成一个啊?如图
重新定义“分割”
2021-05-14 19:04:27 +08:00
回复了 3dwelcome 创建的主题 分享发现 看了 Windows 的 GUID 生成算法,惊掉我下巴。
@3dwelcome 只要一个东西是固定长度的,就不可能存在 100%不重复,鸽笼原理了解一下?
2021-05-12 18:17:38 +08:00
回复了 FaiChou 创建的主题 程序员 打印机的驱动是什么?
其实理论上所有的硬件都需要驱动,甚至包括 CPU,是的,你没看错,包括 CPU,倒回去十多年前,重装完系统后依次安装各种驱动简直就是家常便饭,甚至还因此而诞生了类似驱动之家这样的软件来简化这个过程,那为什么最近这几年主动去安装驱动这件事开始变得陌生了,一是因为操作系统本身已经内置了大量通用的驱动,并且硬件也趋于标准化,所以操作系统内置的驱动已经足以满足了,但是各种硬件定制化的新功能仍然还需要在安装特定的驱动后才能使用,最典型的例子就是刚装完系统时只能设置比较低的分辨率,等装完显卡驱动后才能设置更高的分辨率,二是因为系统本身以及各种 XXX 电脑管家具有联网自动查找并安装驱动的功能,在如今的网速下这个过程已经对用户无感了
1 ... 3  4  5  6  7  8  9  10  11  12 ... 19  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3088 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 31ms · UTC 11:55 · PVG 19:55 · LAX 04:55 · JFK 07:55
Developed with CodeLauncher
♥ Do have faith in what you're doing.