V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Koril  ›  全部回复第 1 页 / 共 2 页
回复总数  36
1  2  
@ala2008 之前碰到了 OOM 的问题:java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached

因为我看程序根本没吃满内存,所以我改了 Xms Xmx Xss ,似乎都没啥用,然后我就在一个虚拟机开了俩实例,nginx 负载均衡,结果就再也没报这个错误了。
非常非常感谢大家的回复,我正在开始了解 Java 21 的虚拟线程,希望能用上
使用 MQ 会不会堆积呢,需求是前端对 /demo 发起请求后,后端逻辑(就是顺序请求外部接口的方法)必须要立即执行,引入中间件会不会增加中间的时延。
36 天前
回复了 Koril 创建的主题 问与答 Frp 内网穿透本地 PostgreSQL 的一个小问题
@yinmin 厉害,有效果,请问这是为什么呢?
@flmn 好的,谢谢你的建议
@Jim2Chen @slomo SpringBoot 3 对于 JPA 还是 MyBatis 的选型,我感觉区别不大,就看团队对哪个更熟悉了,JPA 的很多特性(不是仅仅是简单的 JpaRepository 的 单表 CRUD )的学习门槛很高,多表的关联,对数据库的设计也很讲究,后期新人维护成本高,我觉得它就是属于那种不会用的人会吐槽到累的,相比之下,MyBatis 更直观一点,国内培训机构都爱用,新人维护成本低。
@spritecn @flmn @cleanery @newaccount
感谢各位老哥的建议,今天已经用上了 Java 21 + Spring Boot 3.3.4 + Spring Security 6.3.3

登陆注册 jwt 两个钟头就全搞好了,剩下的就是权限划分+业务代码了。

除了语法的些微改变之外,最大的感受就是老项目的那些黄色波浪线全部消失了,因为是独立开发的新项目,终于不用再忍受老项目里,各种手写奇奇怪怪的校验工具类,实现类,加密类了,还有毫无意义的自定义抽象和流程(明明框架全部都有,引用了框架,又不好好使用框架,真是最大的槽点)。

最佳实践 + 整齐划一 + 规范的感觉真好,就像是从瘴气雨林来到了大草原。

我接下来会接着学习 Java 21 的新特性,感谢。

@chuck1in @sagaxu 业余时间我会了解下,之前听说过,感觉蛮高级。
@yty2012g DDL 比较宽松,业务上的问题应该也没有,简单的单体,登陆注册权限( SpringSecurity ),增删改查( JPA ),加一些定时任务,还有发发邮件之类的,都是以前 jdk8+springboot2.x 做了无数遍的东西。
”所以想尝试下 Java8 + SpringBoot3.x“ 这句话写错了,不好意思,
@sumarker
@sumarker 兄弟这个我知道,所以省略号是什么意思😂
@Leviathann 我刚想问这个哈哈哈哈,直接上 21 是不是更好,一步到胃,接触新的东西多么,之前学 Java8 ,看了本《 Java 8 in Action 》就差不多熟悉了,8 -> 21 有什么比较友好的资料么
昨天刚看完汤浅政明的《心理游戏》。
当我们有手有脚,倘若还有一丝能选择的机会,就有无限可能,不必和他人比较,把整个世界和人生当成一场属于自己的“游戏”,无论从几岁开始都不晚。
@sir283 作为受雇的工作者而言,现场解决问题的工程经验确实是最重要的,毕竟客户的问题,那就是当下最真实的目的,如果现场还能再外包出去(假设有人能更快更好地解决),我可能都不会选择语言,直接让别人做,然后付钱 hhhhhh 。
@billzhuang 作者把这篇文章发到了论坛平台以及自己的个人博客上
65 天前
回复了 tool2dx 创建的主题 随想 编程超人
编程大部分情况是为了解决某些具体的问题,问题本身可能是很有意义的。
为了在维护项目这个枯燥的过程中不那么苦闷,不得不开始寻找或者赋予工具(比如编程)意义。
补充:Clash 打开系统代理,注册表的 ProxyEnable 变成 1 ,反之为 0 ,urllib.request 的 getproxies_registry() 就是拿这个变量来判断的。
@Abbeyok ok ,我去了解下什么是 tun 模式
@proxytoworld 好的
然后就读取到了 ProxyServer 127.0.0.1:7890 这个键值对,然后在末尾的 else 块中,擅自加上了 https ,最后返回的 proxy 变成了:
{
'ftp': 'ftp://127.0.0.1:7890',
'http': 'http://127.0.0.1:7890',
'https': 'https://127.0.0.1:7890'
}
而 Clash 的代理是 http 代理,所以第三个键值对 https: https://127.0.0.1:7890 会引发 ProxyError 异常,显示无法连接到该代理,正确的键值对应该是 https: http://127.0.0.1:7890 。

这是我目前的一点点理解。
感谢大家的回复,晚上回家翻了下源码,这里我自问自答下:

关于第二个问题:为什么 Windows 开了 Clash 的系统代理,使用 requests 如果不显示的设置 proxies 这个参数(无论是方法传参,还是设置环境变量)就无法请求的问题。

requests 的 sessions 模块的 merge_environment_settings() 方法调用了 Python 自带的 urllib 库中的 request 模块的 getproxies() 方法。

似乎顺序是这样的:方法传参 > 环境变量 > 注册表

如果方法没传参,环境变量也没有设置 http/https_proxy 的话,代码走到以下 elif 块中,去读 Windows 的注册表:

```
elif os.name == 'nt':
def getproxies_registry():
"""Return a dictionary of scheme -> proxy server URL mappings.

Win32 uses the registry to store proxies.

"""
# 省略部分代码
try:
# 查询 win 注册表
internetSettings = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
r'Software\Microsoft\Windows\CurrentVersion\Internet Settings')
proxyEnable = winreg.QueryValueEx(internetSettings,
'ProxyEnable')[0]
if proxyEnable:
# Returned as Unicode but problems if not converted to ASCII
proxyServer = str(winreg.QueryValueEx(internetSettings,
'ProxyServer')[0])
if '=' in proxyServer:
# Per-protocol settings
for p in proxyServer.split(';'):
protocol, address = p.split('=', 1)
# See if address has a type:// prefix
if not re.match('^([^/:]+)://', address):
address = '%s://%s' % (protocol, address)
proxies[protocol] = address
else:
# Use one setting for all protocols
if proxyServer[:5] == 'http:':
proxies['http'] = proxyServer
else:
proxies['http'] = 'http://%s' % proxyServer
proxies['https'] = 'https://%s' % proxyServer
proxies['ftp'] = 'ftp://%s' % proxyServer
internetSettings.Close()


return proxies
```
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1357 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 21ms · UTC 17:49 · PVG 01:49 · LAX 09:49 · JFK 12:49
Developed with CodeLauncher
♥ Do have faith in what you're doing.