V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  timethinker  ›  全部回复第 15 页 / 共 19 页
回复总数  369
1 ... 7  8  9  10  11  12  13  14  15  16 ... 19  
2021-07-06 16:44:01 +08:00
回复了 NCityXu 创建的主题 生活 一直都比较浮躁,感觉生活很单调、无聊,大家进来聊聊吧
@hertzry 谢谢兄弟,始终相信会遇到对的那个人
2021-07-05 16:21:42 +08:00
回复了 NCityXu 创建的主题 生活 一直都比较浮躁,感觉生活很单调、无聊,大家进来聊聊吧
@Arrowing 谢谢,已经走出来了
@adminharlem 谢谢
@sharkfu 这个网名随便起的,哈哈
@dongcxcx 看来兄弟也有故事
2021-07-05 09:24:49 +08:00
回复了 NCityXu 创建的主题 生活 一直都比较浮躁,感觉生活很单调、无聊,大家进来聊聊吧
我还记得上次的失恋,给我留下了非常深刻的印象,意志消沉了好一段时间,人总是这样,总是失去了才知道对方的好。
生活中到处都是她的影子,起床是,出门是,吃饭是,甚至连一个城市名,一个地点,也都是她的影子。我觉得将来如果没有她的话,那么跟谁结婚都是一样的吧,很痛苦,也很煎熬。
已经无法挽回了,她走的很坚决,头也不回,我不是没有尝试过放下人格,低声下气去求她,换来的也只是冷漠与忽略。我想我甚至比不上一个陌生人吧。

她要的东西我那时没有办法给,她总是任性,其实到后面不知不觉中,每一次对话的结果,都是负面与伤害,其实何必做到这一步,我真的想让她过的更好,也很爱她,哪怕到后面她对我已经失望透顶,我想对她而言,我俩最好的结果就是放手与不打搅吧,祝她幸福。

故事的开始总是这样,适逢其会猝不及防。故事的结尾总是这样,花开两朵天各一方。断了联系,老死不相往来。

从灰色慢慢变得有颜色,我经历了大半年,直到真正的放下,直到我意识到生活还将继续。
2021-07-02 18:04:39 +08:00
回复了 phpdever 创建的主题 问与答 [请教] 微服务模式下,如何校验用户是否为新用户?
用户服务(授权和用户信息):Service B
A 活动:Service A1
B 活动:Service A2

首先你要知道用户是否已经参加了 A 活动,必然要把这个状态持久化吧,在你的第一个问题中,它是存储在 Service A1 服务上的。
现在有需求,已经参加 A 活动的无法参加 B 活动,那么 Service A2 肯定是要查询 Service A1 才能知道他是不是已经参加过了对吧?
至于“旧用户”这个定义,是否具体为“用户参加了 A 活动就算旧用户”,还是取决于你们的需求,我说过了,只要把需求搞明确,做法是不一样的。假设这个“旧用户”是指存储在用户服务的一个标志状态,那么此时就需要查询 Service B,而不是 Service A1 了。
2021-07-02 10:46:38 +08:00
回复了 phpdever 创建的主题 问与答 [请教] 微服务模式下,如何校验用户是否为新用户?
另外说个题外话,微服务并不是指这种类似 RPC 调用把服务拆分开了就算的,起码有一点,用类似 Dubbo 这种 RPC 就已经就跟 Java 绑定了(虽然可以更改为 HTTP 协议来进行传输,但它终究不过是一个 RPC )。每一个微服务可以有自己独立的技术栈用于实现,通过 REST API 来进行集成,更重要的是,在容错性上(也就是在部署层面)可以做到监控集成与故障转移。

所以个人认为微服务应该是治理性和维护性上的意义大于具体使用什么语言什么框架这种技术性问题。拆分是一门学问,过早的拆分只会引入没有必要的麻烦,应该站在业务层面还有部署层面上看待这个问题。服务发现、网关、配置、监控等等这些组件都是为了在治理性上尽量做到具有弹性。

以上这些是我个人的一些想法,无意教大家什么是对的什么是错的,而是想要让大家思考一下微服务在不同层面不同角度带给我们一些启示。
2021-07-02 10:11:15 +08:00
回复了 phpdever 创建的主题 问与答 [请教] 微服务模式下,如何校验用户是否为新用户?
我再来帮你梳理一下什么是新用户

1 、该用户之前不存在,那么肯定要从不存在变为已存在,也就是说,区分新用户是以注册用户的这个事件为准。
2 、如果一个新用户注册了,领取了你的活动奖励,那么这个已领取的状态应是在 A 服务进行记录的,换句话来说,一个新用户应该不会领取两次奖励,再结合第 1 点以及活动推出的时间,任何创建时间大于这个活动推出时间并且该用户没有领取过奖励的就算新用户。

第一点和第二点我认为是等价的,你认为呢?
2021-07-02 09:51:45 +08:00
回复了 phpdever 创建的主题 问与答 [请教] 微服务模式下,如何校验用户是否为新用户?
要确定这个“是否为新用户”是如何定义的,比如 3 天以内注册的都是新用户?活动推出以后注册的玩家才算是新用户?又或者是在某一个渠道条件下引入注册(创建)的用户才算是新用户?

不同的需求有不同的做法。
2021-07-02 09:45:06 +08:00
回复了 doveyoung 创建的主题 MacBook Air 屏幕裂了,我也幵了
16 年买的 MBP15,是新模具的第一批产品,我觉得最垃圾的就是 touch bar 还有键盘,其他的目前还好,小心爱护一下还是比较持久的,外接显示器+蓝牙键盘+trackpad2 。
2021-07-01 09:43:23 +08:00
回复了 SmartKeyerror 创建的主题 推广 盖楼抽奖 | 感谢 V 站老哥们的认同和鼓励
+1 ZSBD
体力劳动和脑力劳动,后者更能磨练一个人的意志,只有心灵强大才是真的强大。
2021-06-29 17:17:28 +08:00
回复了 bingyiyu 创建的主题 程序员 各位大佬公司 OSS 文件存储是怎么做的?
1 、前端请求服务器(通用接口),获取 Token 以及文件 URL 路径信息,此 Token 用于调用 OSS 云存储 SDK 传入,Token 一般是 Base64 编码后的一长串字符串,SDK 上传至 OSS 云服务器,OSS 云服务器负责校验 Token 以及解析 Token,并根据元信息(业务后端生成 Token 时指定的桶、文件名称)把文件放到指定的位置。这个 Token 类似 JWT 这种结构,里面包含了元信息以及签名。
2 、SDK 上传完毕后,提交表单把 URL 路径信息提交至业务服务器,业务服务器直接保存 URL 路径。
3 、读取的时候,只需要 URL 路径,后端就可以拼接域名+路径得到完整的访问路径,如果是私有的则需要加上访问 Token,那么后端只需要提供一个根据 URL 路径得到访问链接的通用接口即可,前端就可以调用这个接口批量转换解析。

将上传和解析链接独立出来,成为一个通用的接口,业务使用上就可以直接保存 URL 路径,而不必重复上传或解析的工作,前端也可以根据这两个通用的接口得到自己想要的数据。

在调用生成 Token 这个接口上面,可以自定义参数,比如使用场景、文件类型限制等等,方便与 OSS 进行集成,接口在获取这些信息以后就可以生成对应的 Token 以及准备上传文件的 URL 路径,或其他前端需要在上传阶段需要得到的信息。
如果需要区分不同的桶,则可以在保存的 URL 路径上增加特定的前缀,这样解析服务就可以知道这个 URL 路径到底是哪一个桶的,不过不推荐这样做,不同的业务应该使用各自不同范围的服务,而不是一个大统一的跨项目的通用接口。

至于为什么不在业务数据直接返回的时候直接拼接,这取决于前端的需要,其实前端可以合并请求一次性获取。另外就是如果在后端进行拼接,那么每一个接口都需要知道域名等信息,我的建议是不要把业务数据的 URL 路径当做是一个路径或者链接,而应该把它当做一种特定格式标识符,标识符是需要被二次解析的。想象一下如果返回的数据中不仅要包含 URL,还要包含文件名以及大小上传时间等,跟业务数据的耦合性就比较大。或者这一步至少通过一个过滤器来完成,通过注解( Java )的方式来统一处理,否则会有大量重复枯燥的代码。
2021-06-29 15:29:05 +08:00
回复了 mascteen 创建的主题 程序员 前端转行做游戏,有什么需要注意?
个人对于国内做游戏这一块并不看好,问自己几个问题:
有什么东西是你能做的而腾讯抄不了的?
你做的游戏在同类型的市场里面有什么竞争优势?
别人凭什么来玩你的游戏,而他们真正玩的又是什么?

要对这几个问题有所思考和准备,至少支撑自己的信念以及理由不会轻易动摇。
比如玩家玩的实际上是你的 IP,你的游戏内容高度贴合原著,有粉丝基础(至少有人愿意来玩一下)。
比如游戏的世界观,文化背景,如果是原创的,那么这部分内容就是你的核心竞争力,游戏的世界观就像文学一样,可以模仿,但是无法替代。至于游戏玩法,这么多年下来就那么些套路,只是外观不一样罢了。
2021-06-25 18:05:02 +08:00
回复了 itIsUnbelievable 创建的主题 问与答 Elixir 这个语言前景如何呢?
我目前只见过做游戏服务端的有在使用这个语言,因为可以与 erlang 集成,语法也很方便,但是招人的话就是问题了,所以那些规模比较小或者直接换皮复用的游戏用的应该比较多。
2021-06-25 14:14:10 +08:00
回复了 git00ll 创建的主题 MySQL mysql 批量插入和多行插入 哪种方式更好一点呢 ?
如果是 MySQL 的话,我以前测试过,在大批量数据插入情况下(数据迁移),关闭以下这些选项插入更快:
关闭自动提交模式
关闭索引
关闭外键检查

至于 INSERT 语句一次插入一条还是多条,区别在于网络 IO 耗时,在内部速度应该都是一样的,不过返回来想一下,这种合并插入语句更难以维护和编写,除非特殊情况否则不建议这么做。

详见: https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-bulk-data-loading.html
现在的云服务器一般入口带宽都比较高,换句话来说,客户端上传速度有多快取决于客户端的带宽有多高。但是大多数业务不能只上传吧,还得下载,这就是服务器的出口带宽,价格比较昂贵。

所以现在一般都直传 OSS,然后通过 CDN 进行分发,当然也可以省略 CDN,只不过费用也是按照流量来计算的。
@aoizz 按照这个思路,很难想象你一次性要获取 10W 的用户(根据 getByIds,使用 SQL IN 语句?),优化的核心思路在于时间跟空间的平衡点,数据查找尽量使用 SQL 通过数据库来筛选数据,充分利用好数据库的索引功能,避免一次性获取大量数据,然后只使用里面的少量数据。

不过最重要的还是看数据量与看场景,是 OLTP 还是 OLAP,前者尽量保证短时间内完成操作,后者更多的是通过提前创建派生数据来提高查找速度(以空间换时间)。
在不进行预处理的情况下,你可以简单的改为并行流然后查找,users.stream().parallel().filter...,或者 users. parallelStream().filter...
2021-06-11 09:16:01 +08:00
回复了 googlehub 创建的主题 随想 今天是我的生日🎂🎂🎂🍰🍰🍰
祝你生日快落~,祝你生日快落~,哈皮巴斯得图友啊~,祝你生日快落~
2021-06-10 12:35:40 +08:00
回复了 Suomea 创建的主题 MySQL 客户端 SQLite 和服务端 MySQL 数据同步的问题
1:如果是多终端,修改来源不止一处,比较好的方式就是使用订阅机制,相当于多个生产者和多个消费者,同步只需要同步本地不存在的数据,使用一种递增的序列标识来表示数据的前后顺序。

2:使用日志式的存储比较容易实现,即数据只是简单的追加,不涉及到修改,如果有修改或者删除的需求,也仅仅只是追加一条数据(墓碑记录),当然了,数据无止境的累加也是不现实的,因此可以异步定期的去压缩数据(合并同一条记录的修改、移除已被删除的数据),这其实就是许多数据库背后的原理,用在应用层上也是同样的道理,其目的在于减少复杂的 IO 操作(在本例中是为了减少对数据库的复杂操作),提升整体的处理效率。

不太清楚你们的应用场景具体是怎么样的,简单的说一下思路:已经发生的事情是客观存在的,就像一个个事件,我们不能改变过去,但是可以补偿过去,其结果就是如果严格按照先后顺序处理这些事件,其结果最终都是一致的。定期压缩数据也只是建立了一个快照点,这样其他客户端就可以直接从这个快照点获取整个数据,然后在基于这个快照点的版本 ID,去同步之后的事件。

最后说一下问题,多个生产者产生数据可能会遇到冲突问题,需要共识算法来达成一致,这就是典型的分布式问题(比如上面的全局序列 ID/版本号),如果要做到这一步就需要结合业务场景做取舍,取决于你的业务复杂程度。

举个例子,我们都对 git 比较熟悉吧,如果两个人基于同一个版本提交,那么当他们试图同步彼此的时候,必定有一个人需要 merge 或者 rebase,如果对同一个文件修改了,可能还需要处理冲突。为什么说它是分布式的呢?因为可以脱离服务器,在自己本地独立的进行操作,以后同步的时候只需要大家对提交记录达成共识即可。

最后,以上这些都是基于你有多个终端修改源,并且需要同步到多个终端上的假设作为前提,如果只有一个生产者,那么这些问题都不存在了。
2021-06-09 11:03:46 +08:00
回复了 azev 创建的主题 问与答 大家做后端开发时 会更改响应的 HTTP 状态码吗?
2XX:请求成功
4XX:客户端错误
5XX:服务端错误

如果只返回 200,不方便日志的收集和监控预警,因为把错误相关的信息都放到响应体内了,如果有日志相关的收集需求,那么就意味着要去解析响应体。

见过很多前后端分离的项目,不管是成功还是失败,都一股脑返回一个包装体结构,里面大多有 3 个字段( code,message,data ),其实这三个字段不管在成功还是失败的情况下都存在冗余。

比较推荐的做法是,HTTP 状态码仍然继续使用,该返回什么数据直接返回,也不需要一股脑全部加上一个包装体,还美其名曰为规范,在请求正常的情况下,code 和 message 是多余的字段,前端其实只需要里面的 data 。

在错误的情况下( 4XX 和 5XX ),此时统一返回一种表达错误信息的格式才比较有意义,如果仍然返回之前的包装体,那么 data 字段也是冗余的。
1 ... 7  8  9  10  11  12  13  14  15  16 ... 19  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2546 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 01:31 · PVG 09:31 · LAX 17:31 · JFK 20:31
Developed with CodeLauncher
♥ Do have faith in what you're doing.