跳转到内容

小天管理

管理员
  • 注册日期

  • 最后上线

小天管理 发表的所有内容

  1. 我在商场里看了几家体验店,小米 vivoOPPO 三星,只有 vivo 的热点共享里不包含以太网网络共享这个功能,其他几家都有,无论是低端机还是旗舰机。
  2. 我自已有台 j4105 电脑,发现开一个 QQ ,每天十几个群都有消息,还有微信聊天工具,谷歌浏览器开 15 个窗口,CPU 就经常 80%了,再配合一个 todesk 远程控制,经常 100%。 想问一下怎么才知道自已需要买几核 CPU 才能满足这样的性能,当时我知道买 8 核,10 核肯定能解决,只是价格问题,还有功耗比较高,我需要的是性价比,刚好满足,又不会性能浪费。有无什么网址可以直接测,在运行多少个软件情况下,有跑分对比
  3. RT ,现在用的是 AOC U27U2DS ,使用起来算是能满足要求吧。 打算双十一换个显示器,看了一圈满足 mac+KVM 的 4K 显示器好像还是没啥选择。 看了雷鸟 U8 ,感觉色彩是个问题。 也想过试试酷优客 5k ,但是没有 KVM 。 最后还是得傻多戴么?有没有什么其他的推荐?想着换个显示器至少分辨率或者刷新率得有些升级?
  4. Tab 选关注的时候出现的是节点列表 Tab 选节点的时候出现的是主题列表 然后还有翻页的时候经常出现上一页的主题 第三页 第四页 我更好奇难道没有人遇到过这个问题吗
  5. 大伙有没有推荐的移动数据监测 app 呀。想设置一个流量预警,运营商是电信
  6. 按照 v 友=菜市场大妈的逻辑,现在“悲观清醒的人”还非常多,大家不妨拿住就是。
  7. 最近跑步的时候瞎想,在间歇训练总想着以一个稳定的平均速度在操场跑圈,但是普通的手表没有办法让我非常及时、直观的知道当前的配速与目标配速的差距。 联想到基普乔格破 2 时行动时,前方有一辆投射投影的配速车 还有田径比赛的时候跑道侧有移动的灯光标识。 感觉如果有这样一个东西在足够便宜的前提下,会让人操场跑圈跑间歇的时候可能更舒服的? 来请教一下,有没有比较成熟且不会很贵的方案。 抖音上刷到一家类似的(但是产品线功能更全的),报价 7 位数开始,有点恐怖了。 叠甲:跑间歇的时候快个几秒慢的几秒当然不会很影响到训练效果,只是在想有没有什么可以更有趣的方式
  8. 可以打出很长的句子,感觉更加智能了,仿佛有了云词库的感觉(实际上只是本地引擎算法) GitHub 地址: https://github.com/gaboolic/rime-frost
  9. 做数据库应用开发多年,有这方面的远程工作吗
  10. 最近有很多朋友咨询如何开通港卡及券商开户。我就整理了下之前的办理的过程, 📝 行前准备 预约:联系了开户行支行的工作人员帮忙预约,超级方便! 材料准备:身份证、港澳通行证必不可少,还有保留好过关小票,还有可能用到地址证明 充电宝:这个真的太重要了,请一定要带! 🚄 行程安排 我是周五晚上从长沙出发,坐高铁到深圳,第二天一大早就开启了我的香港之旅: 07:53 到达香港西九龙 08:40 左右抵达永隆银行(德辅道中) 小贴士:建议大家也选择中环附近办理,因为银行分行集中,超级方便! 🏦 开户历程 招商永隆 & ZA Bank 刚到永隆银行门口时还没开门,我就去附近吃了个早餐。回来后已经有人排队了,但还好只有两三位。 等待的时候,我顺便在线申请了 ZA Bank 的账户。小伙伴们注意啦,用我的邀请码 JYU7T6 会获得最高 500HKD 奖赏券哦! 永隆银行的开户过程超级顺利,大概半小时就搞定了。他们会问问开户原因,可能需要看下流水,整体氛围很轻松。 中国银行 永隆办完直接去了附近的中银分行。等待时间不长,但开户过程稍微久了点,大约 1 小时。 需要下载两个 App:中银香港和 BoC Pay 。银行职员超级 nice,全程帮我操作,我只需要填写必要信息。 ⚡小插曲:隔壁小哥因为收不到验证码放弃了开户。所以一定要提前开通漫游! 💡 实用小贴士 充电宝:可以在 7-11 借用 ChargeSPOT 移动充电宝。 电话卡:同样在 7-11 可以买到 clubsim 卡。 🌃 回程 下午大概 5 点多坐地跌到福田口岸,行程有点赶。 此外,到香港后,也可以在线上开通中国银行,不需要到中国银行的业务网网点。还有就是朋友有朋友开通过程遇到柜员 更多情况看博文:一日港卡开户亲身经历
  11. GPT 说用 SIGNAL 或 win32api 捕捉关闭信号,但是我试了一下都只能在用 Ctrl+C 关闭的时候能成功触发。我想要能在直接把 python 的窗口关掉的时候也能执行这个功能
  12. Magician-Concurrent Magician-Concurrent 是一个并发编程工具包,当你需要并发执行某些代码的时候,不需要自己创建和管理线程,除此之外里面还提供了生产者与消费者模型 初始化配置 导入依赖 <dependency> <groupId>com.github.yuyenews</groupId> <artifactId>Magician-Concurrent</artifactId> <version>1.0.0</version> </dependency> 并发处理任务 MagicianConcurrent.getConcurrentTaskSync() .setTimeout(1000) // 超时时间 .setTimeUnit(TimeUnit.MILLISECONDS) // 超时时间的单位 .add(() -> { // 添加一个任务 // 在这里可以写上任务的业务逻辑 }, (result, e) -> { // 此任务处理后的回调 if(result.equals(ConcurrentTaskResultEnum.FAIL)){ // 任务失败,此时 e 里面有详细的异常信息 } else if(result.equals(ConcurrentTaskResultEnum.SUCCESS)) { // 任务成功,此时 e 是空的 } }) .add(() -> { // 添加一个任务 // 在这里可以写上任务的业务逻辑 }, (result, e) -> { // 此任务处理后的回调 if(result.equals(ConcurrentTaskResultEnum.FAIL)){ // 任务失败,此时 e 里面有详细的异常信息 } else if(result.equals(ConcurrentTaskResultEnum.SUCCESS)) { // 任务成功,此时 e 是空的 } }) .start(); 添加进去的任务会并发执行,但是在它们执行完之前,这整个代码块会同步等待在这,一直等到所有任务执行完或者超时才会继续往下走。 这里面的超时时间就是用来设置同步等待多久的。 如果设置为 0 表示一直等到所有任务完成为止 设置为大于 0 的时候,表示只等待这么久 并发处理 List ,Set 等所有 Collection 类的集合里的元素 同步执行 // 假如有一个 List 需要并发处理里面的元素 List<String> dataList = new ArrayList<>(); 每个元素并发执行 // 只需要将他传入 syncRunner 方法即可 MagicianConcurrent.getConcurrentCollectionSync() .syncRunner(dataList, data -> { // 这里可以拿到 List 里的元素,进行处理 // List 里的元素是什么类型,这个 data 就是什么类型 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); 这个方法会将传进去的集合分成若干组,每组的大小由参数指定。 这些组会排队执行,但是每一组在执行的时候都是并发的,里面的每一个元素都会由单独的线程去处理。 需要等一组处理完了,才会处理下一组,但是有时候我们不想这么死板的等待,所以可以设置一个超时时间,超过了这个期限就不等了,直接进行下一组,所以这里的最后两个参数就是用来设置这个期限的。 每一组并发执行 // 也可以用 syncGroupRunner 方法 MagicianConcurrent.getConcurrentCollectionSync() .syncGroupRunner(dataList, data -> { // 这里可以拿到每一组的元素,进行处理 // 这个 data 就是每一组 List ,可以自己迭代处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); 这个方法会将传进去的集合分成若干组,每组的大小由参数指定。 每一组由单独的线程处理。 会一直同步等待在这里,直到所有组都处理完了才会进行下一步,但是有时候我们不想这么死板的等待,所以可以设置一个超时时间,超过了这个期限就不等了,直接执行下一步。所以这里的最后两个参数就是用来设置这个期限的。 异步执行 其实就是将上面 [同步处理] 的代码放到了一个线程里,内部处理依然是上面 [同步处理] 的逻辑,但是这整个代码块将会异步执行,不需要等在这。所以个别相同的参数就不再重复解释了。 // 假如有一个 List 需要并发处理里面的元素 List<String> dataList = new ArrayList<>(); 每个元素并发执行 // 只需要将他传入 asyncRunner 方法即可 MagicianConcurrent.ConcurrentCollectionAsync( 1, // 核心线程数 1, // 最大线程数 1, // 线程空闲时间 TimeUnit.MINUTES // 空闲时间单位 .asyncRunner(dataList, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); ConcurrentCollectionAsync 里的参数其实就是线程池的参数,除了上面这种写法,还可以这样写。 每调用一次 asyncRunner 都会占用一个线程,而这些线程都是由一个线程池在管理。 ConcurrentCollectionAsync concurrentCollectionAsync = MagicianConcurrent.ConcurrentCollectionAsync( 1, // 核心线程数 1, // 最大线程数 1, // 线程空闲时间 TimeUnit.MINUTES // 空闲时间单位 ); concurrentCollectionAsync.asyncRunner(dataList, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); concurrentCollectionAsync.asyncRunner(dataList2, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); concurrentCollectionAsync.asyncRunner(dataList3, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 ); 用这个方法可以管理线程池 // 关闭线程池 concurrentCollectionAsync.shutdown(); // 立刻关闭线程池 concurrentCollectionAsync.shutdownNow(); // 获取线程池 ThreadPoolExecutor threadPoolExecutor = concurrentCollectionAsync.getPoolExecutor(); 每一组并发执行 // 也可以用 asyncGroupRunner 方法,每个参数的具体含义可以参考文档 MagicianConcurrent.ConcurrentCollectionAsync( 1, // 核心线程数 1, // 最大线程数 1, // 线程空闲时间 TimeUnit.MINUTES // 空闲时间单位 .asyncGroupRunner(dataList, data -> { // 这里可以拿到 List 里的元素,进行处理 System.out.println(data); }, 10, // 每组多少条元素 1, // 每组之间同步等待多久 TimeUnit.MINUTES // 等待的时间单位 同上 并发处理所有 Map 类的集合里的元素 Map 的逻辑跟 Collection 一模一样,只不过是传入的集合变成了 Map ,就不再累述了,感谢理解。 同步执行 每个元素并发执行 // 假如有一个 Map 需要并发处理里面的元素 Map<String, Object> dataMap = new HashMap<>(); // 只需要将他传入 syncRunner 方法即可 MagicianConcurrent.getConcurrentMapSync() .syncRunner(dataMap, (key, value) -> { // 这里可以拿到 Map 里的元素,进行处理 System.out.println(key); System.out.println(value); }, 10, 1, TimeUnit.MINUTES); 每一组并发执行 // 也可以用 syncGroupRunner 方法 MagicianConcurrent.getConcurrentMapSync() .syncGroupRunner(dataMap, data -> { // 这里可以拿到每一组 Map 进行处理 System.out.println(data); }, 10, 1, TimeUnit.MINUTES); 异步执行 每个元素并发执行 // 假如有一个 Map 需要并发处理里面的元素 Map<String, Object> dataMap = new HashMap<>(); // 只需要将他传入 asyncRunner 方法即可 MagicianConcurrent.getConcurrentMapAsync( 1, 1, 1, TimeUnit.MINUTES ).asyncRunner(dataMap, (key, value) -> { // 这里可以拿到 Map 里的元素,进行处理 System.out.println(key); System.out.println(value); }, 10, 1, TimeUnit.MINUTES); 每一组并发执行 // 也可以用 asyncGroupRunner 方法 MagicianConcurrent.getConcurrentMapAsync( 1, 1, 1, TimeUnit.MINUTES ).asyncGroupRunner(dataMap, data -> { // 这里可以拿到每一组 Map 进行处理 System.out.println(data); }, 10, 1, TimeUnit.MINUTES); 生产者与消费者 这是一个多对多的模型,多个生产者可以给多个消费者推送不同类型的数据, // 创建一组生产者与消费者,而这样组可以创建无限个 // 每一组的生产者都只会把数据推送给同一组的消费者 MagicianConcurrent.getProducerAndConsumerManager() .addProducer(new MagicianProducer() { // 添加一个生产者(可以添加多个) /** * 设置 ID ,必须全局唯一,默认是当前类的全名 * 如果采用默认值,可以不重写这个方法 * @return */ @Override public String getId() { return super.getId(); } /** * 设置 producer 方法是否重复执行,默认重复 * 如果采用默认值,可以不重写这个方法 * @return */ @Override public boolean getLoop() { return super.getLoop(); } /** * 设置 是否等消费者全部空闲了才继续生产下一轮数据,默认 false * 如果采用默认值,可以不重写这个方法 * @return */ @Override public boolean getAllFree() { return super.getAllFree(); } /** * 当生产者启动后,会自动执行这个方法,我们可以在这个方法里生产数据,并通过 publish 方法发布给消费者 * * 这边举一个例子 * 假如我们需要不断地扫描某张表,根据里面的数据状态去执行一些业务逻辑 * 那么我们可以在这个方法里写一个查询的逻辑,然后将查询到数据发送给消费者 */ @Override public void producer() { // 根据上面的例子,我们可以查询这张表里符合条件的数据 List<Object> dataList = selectList(); // 然后将他推送给消费者 // 可以推送任意类型的数据 this.publish(dataList); /* * 如果你只需要执行一次,那么到此就结束了,这个生产者也可以被回收掉了 * * 但是如果你需要不断地执行上述操作,来维护这张表里的数据,这个时候你有两种做法 * 第一种:加一个 while 循环 * 但是这种方式有个问题,如果消费者的消费速度跟不上,那么就很容易造成消费者队列积压,出现内存问题。 * 而数据积压太久又会影响时效性,可能你推送给消费者的时候,这条数据需要处理,但是等到被消费的时候又不需要处理了,这样容易出现数据错乱的问题。 * * 第二种:等消费者把你推给他的数据消费完了,再推送下一轮,而我们就是采用的这种 * 如果你想用这种方式,那么你不需要再写其他的任何逻辑,只需要将上面提到的 getLoop 方法重写一下,并返回 true 即可 * 当你设置为 true 以后,生产者在推送完一轮后会不断地监视消费者,当发现了空闲的消费者才会推送下一轮数据,并且数据只会推送给这个空闲的消费者 * * 如果你想等所有消费者都空闲了以后再推送下一轮,而不是发现一个空闲的就推送一轮 * 那么你可以重写上面提到的 getAllFree 方法,返回 true 即可 */ } }) .addConsumer(new MagicianConsumer() { // 添加一个消费者,可以添加多个 /** * 设置 ID ,必须全局唯一,默认是当前类的全名 * 如果采用默认值,可以不重写这个方法 * @return */ @Override public String getId() { return super.getId(); } /** * 心跳通知,消费者每消费一个任务,都会触发一下这个方法 * 我们可以根据他触发的频率来判断这个消费者的活跃度 * * 注意!!! * 这个方法里不可以有耗时的操作,不然会将消费者阻塞的 * 如果一定要加耗时的操作,那么务必在新线程里搞 * @param id */ @Override public void pulse(String id) { new Thread(()->{ // 如果你需要在这个方法里搞一些耗时的操作,那么务必要像这样开启一个新线程 // 不然消费者会被阻塞的 }).start(); } /** * 消费频率限制,默认 10 毫秒,取值范围:0 - long 的最大值,单位:毫秒 * * 如果任务执行的耗时小于 execFrequencyLimit ,则等待 execFrequencyLimit 毫秒后再消费下一个任务 * * 首先这是一个生产者和消费者多对多的模型结构,我们以一个生产者对多个消费者来举例 * 生产者生产的数据只有一份,但是他会推送给多个消费者 * 而我们之所以要配置多个消费者,是因为需要他们执行不同的业务逻辑 * 多个消费者执行的业务逻辑不同,也就意味着他们需要的数据大概率会不同 * * 比如消费者 A 需要处理男性的数据,消费者 B 需要处理女性的数据 * 如果生产者刚好连续推送了几批男性的数据,那么这会导致消费者 B 筛选不到女性数据,那么他就不会处理业务逻辑了 * 这么一来,消费者 B 就会无限接近空转,而空转会引起 CPU 占用率过大,所以必须加以限制 * * 千万不要小看这个问题,本人曾经在实战中亲测过,做不做这个限制,CPU 的占有率会达到 10 倍的差距 * 当然了,这跟消费者的业务逻辑还是有一定关系的,具体情况具体看待 * 如果你的消费者几乎不会出现空转,那么这里可以设置为 0 * */ @Override public long getExecFrequencyLimit() { return super.getExecFrequencyLimit(); } /** * 这个方法会接收到生产者推送过来的数据 * 在里面执行相应的业务逻辑即可 * @param data */ @Override public void doRunner(Object data) { // data 可以是任何类型 // 因为能给他推送数据的消费者是固定的,所以 data 有可能收到的类型也是固定的 // 所以我们可以在这里自己判断,然后转化即可 // 为什么不用泛型?这是为了兼容多个生产者,因为他们推送的数据类型可能会不同 } }) .start(); } 项目官网:https://magician-io.com
  13. 什么牌子的剃须刀好用,现在用的手动剃须刀,1-2 次就得换刀片, 太不耐用了
  14. claude 3.5 sonnet 有多强?我把 github.com/suniw/fhash 这个仓库地址扔给模型,(c++)源码,让它帮我翻译成 xcode 代码。一次成功,我没增改一行代码,程序员你慌不慌? 效果展示 https://i.imgur.com/Ae6jryg.mp4 佩服佩服!!!!
  15. RealtimeAPI - 像人类一样与 AI 实时交谈 https://realtimeapi.net/
  16. 昨天也没剧烈运动 纯粹是骑车的时候蹬用力点,骑车一小时左右,今天起床神清气爽(不排除是放假的心理因素)。大家快运动起来吧,摆脱亚健康
  17. 功能简单点都无所谓 源码齐全开箱即用 包部署 方便二开的就好
  18. 有没有能够跳过带有商品介绍回答的插件。 旧版网页或者第三方的浏览器会不会有这个功能,不太像每次都看折叠一些利益相关的回答
  19. 有点点想收台三星来玩玩 日常往返中欧,因此对 NFC 的需求是:在欧洲绑当地 VISA/Mastercard 银行卡日常消费,在国内用来刷交通卡。再加个 NFC 模拟门禁的需求。 不知道 Samsung Pay 分不分地区,国内交通卡和 VISA/Mastercard 以及 NFC 模拟能否共存?以及这些跟机器硬件地区版本和系统地区版本有没有关系?
  20. 完整的报错内容如下所示: 2024-10-02 01:15:19.714 ERROR 29348 --- [ main] o.s.b.web.embedded.tomcat.TomcatStarter : Error starting Tomcat context. Exception: org.springframework.beans.factory.UnsatisfiedDependencyException. Message: Error creating bean with name 'reqEnvContextFilterRegistrationBean' defined in class path resource [com/example/common/core/CommonCoreConfiguration.class]: Unsatisfied dependency expressed through method 'reqEnvContextFilterRegistrationBean' parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'reqEnvContextFilter': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sys.app-name' in value "${sys.app-name}" 这个问题显然是因为无法解析出 sys.app-name 的值导致的,然而奇怪就奇怪在这个值我很明确我已经设置过了,在 application.properties 中,有下面的配置 sys.app-name=demo sys.ms-name=demo 按说是不该出现这个问题的,但是却会报这个问题 我的项目中并没有直接使用 sys.app-name 这个值,但由于这个是我公司的 demo 项目,内部的公司依赖可能在某处解析了该值,只是我不知道而已,我没法通过不使用该值或者给他一个默认值的方法来解决这个问题 我使用的 jdk 版本为 8 ,maven 版本为 3.5.3 搜索引擎上的方法我基本都尝试过了,都无法解决该问题,我实在没法了所以我来这问问各位,希望有大佬能救一下