V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  timethinker  ›  全部回复第 16 页 / 共 17 页
回复总数  323
1 ... 8  9  10  11  12  13  14  15  16  17  
2021-04-15 13:31:23 +08:00
回复了 AhogeK 创建的主题 问与答 因为把公司 Mysql 一堆带 null 字段优化非空带默认值被骂
NULL 值会影响索引?关于这一点我觉得还是要看场景,如果仅仅只是用空字符串或者 0 来替代 NULL 值,我觉得是没有必要的。也取决于用的什么数据库 /存储引擎。
2021-04-13 10:57:05 +08:00
回复了 Tarken 创建的主题 问与答 有想要戒烟的朋友吗,电子烟可以帮助戒烟吗?
+1 给自己洗脑,不要尝试通过意志力或者自制力,这样会很痛苦,而且大概率经受不住诱惑。
粗略认知到一件事情的好坏还不足以影响情感大脑对一件事情的进行彻底的反思,除非遇到重大转折点。
那么有没有一种没有痛苦的戒除不良习惯的好方法?
答案是有!
《暗时间》里面说,习惯之所以难以改变,是因为它是自我巩固的,越用越强,越强越用。能够从容的改变既有的习惯,靠的不是意志力或者自制力,而是知识。
《这本书可以帮助你戒烟》则是比较针对性的给你洗脑,值得一试。
2021-04-13 10:00:44 +08:00
回复了 LeeReamond 创建的主题 问与答 数据库单表查询速度慢的瓶颈在哪里?
这里面涉及到太多的内容了,楼主如果实在想要了解的话推荐一本书《数据密集型应用系统设计》。书本身的内容简单易懂,并且引用了大量的文献资料以便深入阅读。
2021-04-12 16:45:39 +08:00
回复了 Dogod37 创建的主题 Java web 页面转换为实时图片
也许在客户家里装个监控摄像头更合理一些。[狗头]
2021-04-12 15:20:50 +08:00
回复了 Dogod37 创建的主题 Java web 页面转换为实时图片
前端实现就是把整个 dom 转换为图片吧,有一个库叫做 dom-to-image,然后上传到服务器。
如果想要后端实现的话,想一下,一个网页的构成为 HTML+CSS,这意味着你要在服务器上面渲染一个页面,包括同步客户端上的操作(跟客户端保持一致),很难想象为什么要这样做。后端一般只是单纯的记录日志,比如用户点了啥,这种活动追踪只记录相关的日志信息比较好实现。
2021-04-12 11:29:39 +08:00
回复了 rikka 创建的主题 问与答 要在几千台机器上部署穿透程序, frp or nps?
我目前用的 frp,需要配置手动写配置文件,暂时没有遇到什么问题。nps 没有测试过,不过看介绍优点是可以动态管理配置信息不需要重启服务,两个都是 go 写的,部署也比较方便。

不过你这个几千个节点建议还是自己测试一下才能知道最后的结果是啥,转发服务器的带宽配置也需要考虑。
2021-04-09 17:01:11 +08:00
回复了 FreeEx 创建的主题 程序员 数据库存储的敏感信息是否需要加密存储?
分两部分看:
密码一般不可逆,我们也没有必要逆向出密码的明文,因此属于哈希类的,只需要通过相同的哈希算法得出一致的结果就行,不关心它的明文到底是什么。

但是手机号等这类信息是需要可逆的,也就是加密之后还得解密,落地存储到数据库的时候到底要不要对此类信息进行加密,我记得三级等保是需要的,但是加密的一个后果就是无法支持区间条件查询,比如一个需求是查询所有以 188 开头手机号的所有记录,加密以后就无法进行范围匹配查询了,当然了,也可以有其他的辅助性的索引支撑,但是复杂性也会随之提高。

我又要唠叨一下了,没有绝对的安全,只能尽量保证在泄露数据之后,使泄露出去的那一部分无法单独得出有意义的结果,比如只是数据库被脱库了,但是没有应用代码的逻辑,即使拿到那一部分数据也是没有意义的。当然了,如果你的应用代码和数据库全被扒了,那么再好的加密措施也会变得没有意义,就看对方是否愿意花时间在这上面研究了。
2021-04-09 15:53:59 +08:00
回复了 dengji85 创建的主题 Java 各位 30cm, 问一下 所谓的 service 层中怎么优雅获取当前用户
在同步编程模型下直接通过本地线程变量获取绑定的信息,相当于在这个线程上下文中设定了全局变量。

使用同步编程模型,如果在 service 里面获取当前的信息,就跟使用 service 的环境耦合了(本地线程变量),service 不是无状态的。

当然如果一直使用这种同步编程模型是没什么问题的,但如果想要在异步环境下不改变代码也可以使用 service 的话,就必须要在执行阶段先进行类似环境绑定的操作。

比如在执行前,将之前的全局变量绑定到当前的线程,执行完以后再清除避免下一个执行任务获取到错误的信息。
2021-04-07 15:50:35 +08:00
回复了 yumc 创建的主题 Java Java 数据对象的 toString()重写为 Json 格式的优劣
@zhilincom 硬编码拼接除非字符串这些是固定可预期的值,否则会出现像 SQL 注入的那样,破坏了 JSON 的结构。另外,反过来想,与其调用 toString 返回 JSON 字符串,为什么不直接把对象传给 JSON 序列化器呢?

例如:JSON.stringify(obj)
2021-04-07 15:43:15 +08:00
回复了 DimplesL 创建的主题 Java 前端转后端学习 Java
跟楼主一样,从前端转后端,我大概是 2017 年的时候转过来的,在此之前我是做游戏客户端的,用过 Cocos2dx 和 Unity 。

下定决心刚转过来的时候确实比较难,很多概念知识都不会,知识体系明显不足,老实说我刚开始用 Spring 的时候就是用的 SpringBoot,甚至连控制反转、依赖注入、AOP 这些概念都不清楚,更别说如何用好 Spring 了。

在国内做后端肯定离不开数据库操作,对数据库也不熟,老实说我以前上大学的时候报了个培训班,学的是 C#和 SQL SERVER,出来就没用过,还花了好几万块钱。

当时项目上需要,我就用的 JPA,一开始不会用,性能效率一团糟。后来慢慢积累了一些知识,改用 MyBatis,再后来直到现在,我又用回了 JPA,原因就是有自动化的东西为什么要手动呢?说到底框架是没问题的,不管是 MyBatis 还是 Hibernate,关键是如何正确的使用好它。

学会后端之后我安心了,相比于之前做前端给我感觉是,吃了这顿没下顿,心总是悬着的,也正是因为这种不安,驱使我学习了后端。

PS:我现在仍然会做前端,比如 React 、Vue 不敢说精通,起码做工程是完全没问题的。回想起做游戏那段时间,996 算什么?你们怕不是没见过周一去公司上班,周六深夜才下班回家,一周中日夜交替睡在公司的行军床上。
看书要想记着点东西就需要自己阅读过后有一个总结,有自己的思考。
虽然不至于像我们以前读书的时候那样,学完东西还要考试,所以关键还是在于你看书的目的是啥?

而且读不同的书也有不同的读法,像楼主你提到的这种书专业性都比较强,如果不是带着苦思于如何解决问题的目的去看的话,一般了解其中的概念就差不多啦,细的东西等真正用到的时候再查不迟。

看,总比不看强,打开书本就成功了一半。
2021-04-01 09:14:18 +08:00
回复了 aozora529 创建的主题 程序员 海外留学生想入 Java 的坑,请各位大佬给给建议
@hiphopluda 有方法打开,不过需要一些特别的技术,这些技术我相信圈内人士都应该明白。
2021-03-31 16:35:20 +08:00
回复了 Mr0C 创建的主题 随想 如何在生活工作学习中变得自律自控
很久以前看过一本书,叫做《暗时间》,上面说的是:
我们想要自律其实就是改变习惯,但是改变习惯不能靠意志力或者自制力,而是靠知识,让自己真正的接受某一个现实。
习惯之所以难以改变,是因为它是自我巩固的,越用越强,越强越用。
2021-03-31 09:31:51 +08:00
回复了 aozora529 创建的主题 程序员 海外留学生想入 Java 的坑,请各位大佬给给建议
个人认为算法的目的在于,提高计算机的处理效率,在时间复杂度和空间复杂度之间做权衡。

那么首先得搞明白计算机的体系架构,比如搞数据库的,就要考虑到在传统机械硬盘的固有缺陷下如何更好的提升吞吐量。

很多时候我们并不需要去关心如此底层的东西,计算机发展到现在基本上所遇到的问题都有的相应的解决方案,各类编程语言也有相应的库供我们直接使用,我认为学会 Google 比什么都强。
一般涉及到消息发送都基本上是异步流程了,建议在一个本地事务中将需要发送的消息写入到一个“消息发送表”内,另一个线程定时扫描这张表,然后将消息发送出去,发送完成就可以删掉或标记为已处理,发送失败记录失败次数和异常等原因。
使用帧同步的这种游戏一般来讲实时性和运算复杂性要求都比较高,服务端不大可能参与运算。对于外挂,每一家公司都有不同的策略,有的是通过举报,即不公平性导致其他玩家察觉出外挂的存在,作弊玩家顾忌账号的注册成本,或者通过技术性的检测(即在服务端模拟一个轻量级的客户端接收事件序列,模拟当前的状态是否有异常,不过开发成本也会比较高)。

假设当状态都由服务端来进行计算,客户端的每一个细节都需要考虑到,计算量就会特别大,而且将这些计算完毕的状态再同步下发给客户端的网络带宽也很高(例如某一个物品的位置、状态),而且对于物理引擎也要跟客户端同步,比如计算碰撞、物理惯性各种细节,因为逻辑帧相对来说都比渲染帧要低,客户端也不能够完全按照服务端下发的状态进行立即同步,不然画面显示就会有卡顿,客户端必然要在本地进行平滑过渡处理,处理不好可能会导致画面漂移等一系列问题,就需要一个取舍。

所以在服务器进行状态运算产生的问题就是网络带宽和运算性能。

现在有一种叫做云游戏的东西,客户端只是当做一个“视频播放器”,把触摸或按下键盘的操作发给服务器,服务器完成操作渲染后传输流数据给客户端,客户端安装包可以做到很小,只有几 MB 。对于高实时的游戏来说明显会感觉到延迟,就像手机通过 2.4G 无线 WIFI 投屏到电视一样,手机画面同步到电视上总会慢一拍。

也有说网络延迟会越来越高,这个问题其实有时候我们玩游戏也能够感觉出来,一种做法是快进播放,网络的延迟只是暂时的,当它跟上来了,就需要把之前的逻辑帧补上去,所有有时候会觉得画面突然的快进,其他的玩家不会等你,在其他玩家看来你只是停留在那里,谁叫你网络不好呢对吧?

假设服务端只负责事件转发,就需要确保客户端的运算结果是一致的,包括不同设备 CPU 的浮点计算结果一致(有自己的底层计算库),游戏引擎也要做适配,不然就会产生不同步的现象,要保证这一点就需要大量的测试,尽可能覆盖多一点的设备。但是开发成本显然更低,只需要侧重于客户端,并且减少了与服务端的联调,开发效率就会提高。
2021-03-24 09:32:22 +08:00
回复了 rqxiao 创建的主题 Java 请问 spring 里的事务和数据库中的事务本质上是一个东西吗
声明式事务实现原理就是利用 AOP 代理拦截目标方法,在目标方法调用前后实施事务外围工作。

感兴趣的可以看一下 org.springframework.transaction.interceptor.TransactionInterceptor
@3dwelcome 这应该是国内大多数中小型公司的常态,我们都知道有些事情是对的,但是却往往被情感左右。说到底一个人都不完美,更何况一个群体了。

所以尽管工作氛围不尽如人意,但是决定我们自身如何的还是我们自己。工作沟通上保持积极,认真做好自己的工作,专注和坚持从来都不容易,真的是需要长久的磨练的。有点鸡汤的味道了,祝你能够踏上自己所想的那条路。
CRUD 也是有讲究的,你看,实际上就两种操作,一种是修改,一种是查询。
简单的 CRUD 从前端到后端甚至数据库字段都完全一致,就是面向数据库编程,Service 都不需要。

复杂一点的,把这两种操作当成两套代码来写:

修改操作多以动词命名,会精炼出业务的实际需要的操作列表,把他们全部放在 Service 里面,每一个方法就是一个事务,或者使用门面模式封装独立的命令执行(命令模式)。

查询操作完全取决于你的消费方需要什么样的数据,把查询的逻辑处理全部放到 Repository 里面,返回 View 或者 DTO 啥的,只专注于如何批量查询并组合成需要的数据,可以是 SQL,可以是 HTTP 请求。很多人喜欢把查询也放到 Service 中,但实际上两者的关注点是不一样的。

读写分离以后好处是显而易见的,查询和修改都可以单独进行优化,最重要的是更加清晰可读。
当然以上只是一种方法,从技术上来讲,写业务代码最大的难度和关键点在于需求是否足够清晰,领域知识是否完备。反之造轮子则不需要这些额外的知识,但终究来讲轮子也是服务于某一个技术点的,最终也是要服务于业务的。
帧同步需要客户端计算结果严格一致,不然就会走偏,服务端在一局的游戏中只扮演数据转发的角色。
1 ... 8  9  10  11  12  13  14  15  16  17  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1993 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 28ms · UTC 01:31 · PVG 09:31 · LAX 18:31 · JFK 21:31
Developed with CodeLauncher
♥ Do have faith in what you're doing.