Monday, April 26, 2021

V2EX - 技术

V2EX - 技术

V2EX - 技术


Mix XWP V1.1 - Go 通用动态协程池 WorkerPool

Posted: 26 Apr 2021 04:56 AM PDT

OpenMix 出品:https://openmix.org

Mix XWP

通用动态工作池、协程池

A common worker pool

Github

https://github.com/mix-go/xwp

Installation

go get github.com/mix-go/xwp 

Usage

先创建一个结构体用来处理任务,使用类型断言转换任务数据类型,例如:i := data.(int)

type Foo struct { }  func (t *Foo) Do(data interface{}) {     // do something } 

调度任务

  • 也可以使用 RunF 采用闭包来处理任务
  • 如果不想阻塞执行,可以使用 p.Start() 启动
jobQueue := make(chan interface{}, 200)  p := &xwp.WorkerPool{     JobQueue:       jobQueue,     MaxWorkers:     1000,     InitWorkers:    100,     MaxIdleWorkers: 100,     RunI:           &Foo{}, }  go func() {     // 投放任务     for i := 0; i < 10000; i++ {         jobQueue <- i     }      // 投放完停止调度     p.Stop() }()  p.Run() // 阻塞等待 

异常处理:Do 方法中执行的代码,可能会出现 panic 异常,我们可以通过 recover 获取异常信息记录到日志或者执行其他处理

func (t *Foo) Do(data interface{}) {     defer func() {         if err := recover(); err != nil {             // handle error         }     }()     // do something } 

查看 Workers 的执行状态:通常可以使用一个定时器,定时打印或者告警处理

go func() {     ticker := time.NewTicker(1000 * time.Millisecond)     for {         <-ticker.C         log.Printf("%+v", p.Stat()) // 2021/04/26 14:32:53 &{Active:5 Idle:95 Total:100}     } }() 

License

Apache License Version 2.0, http://www.apache.org/licenses/

一个 10w+用户的 Chrome 插件可以卖多少钱?

Posted: 26 Apr 2021 04:55 AM PDT

我做了个 Chrome 插件,目前有 10w+用户,有个国外老哥给我给我发邮件,愿意花 1000 刀买。插件是个工具类插件,功能不复杂,老哥觉得要卖么,以及该卖多少钱?

有没有办法让 Android App 一进入后台就自动暂停

Posted: 26 Apr 2021 04:50 AM PDT

经常需要保持某些 app 在 RAM 里,高频次的切换,但又不需要它在后台运行,类似墓碑机制

这些 app 还很流氓,在后台消耗手机的其他资源,造成系统卡顿

用黑域之类的 往往就直接把 App 退出了,下次打开还要等待它加载

大龄 C++码农在人生的十字路口迷惘了

Posted: 26 Apr 2021 04:43 AM PDT

用 C++做过 QT,做过 web 后端,对,是 web 后端!因为做过 C#,所以 web 后端常用的技术,对我来说并不陌生,都用 C++在项目里实现了一遍,代码写得像 C#跟 java,虽说就是在造轮子,但也巩固了各方面的知识,对系统架构有较深的理解,在公司里担任主程和组长

今年刚好是而立之年,但我觉得这些年,都没有找准方向,什么都会一点,但不精通,没有职业规划。 我考虑了很久,目前考虑在以下方向里选择一个(如果有更好的方向,欢迎提出来)

opengl 、区块链、游戏服务端

但在招聘网站上搜索了一下 opengl 和区块链,悲剧,岗位最多一页,而游戏服务端的话,岗位虽然多,但根据网上和身边朋友的说法,游戏行业加班超级严重,如果生活和工作不能平衡,我觉得这工作没有意义。

希望各位大佬能给小弟指点迷津!谢谢!

像 springboot 这种 jar 包运行的方式,真的能做到系统运行中像 PHP 类系统一样启动时候就配置数据相关信息吗

Posted: 26 Apr 2021 04:35 AM PDT

像 springboot 这种 jar 包运行的方式,真的能做到系统运行中像 php 类系统一样启动时候就配置数据相关信息吗 比如: 一启动就需要配置数据库信息,而不是写死在配置文件或第三方配置中心。

请教关于 git 的分支合并的最佳实践,多人协作时 hotfix 该如何处理?

Posted: 26 Apr 2021 04:25 AM PDT

在看 git 合并策略的文章时注意到了一个案例,dev 分支上加入了一个 A 文件,然后合并给了 main 分支。dev 分支继续向前开发。此时 main 分支发现新加入的 A 文件有 bug,于是紧急 fix,撤掉了合并,并生成一个新的 commit 。。此时 dev 在向前推进了一个 commit,然后此时 dev 再次合并到 main,合并后发现 main 内部"丢失"了 A 文件。

那篇文章解释这个现象是"三向合并"导致的,因为,因为 main 撤销合并时,实际对 A 文件做了删除,而 dev 分支直到第二次合并时对 A 没有任何改变,所以这个"对 A 改变"的行为在版本上说是最新的,于是合并后,A 就被删除了。

这个问题让我产生的疑问是:
*.按这个理解,最好不要在 main 分支上直接做任何改动?
*.但是如果我要 hotfix 的时候,该怎么操作呢?难道 hotfix 的改动需要通知到 dev 去?也就是 hotfix 合并到 dev,那如果人多一点,同时有十几个个 dev 分支在开发,一个 hotfix 就要发十几次次合并?
*.而且,像上面这文里提到的,hotfix 需要删除文件,把 hotfix 合并到 dev,肯定会导致 dev 的文件也被删掉,这是不是有点不妥?

MySQL 复杂的 in 子查询语句会导致筛选失效?

Posted: 26 Apr 2021 04:23 AM PDT

导入数据

CREATE TABLE test ( 	id INT UNSIGNED auto_increment PRIMARY KEY, 	shop_id INT (11) UNSIGNED NOT NULL ); INSERT INTO test (id, shop_id) VALUES (1, 1); INSERT INTO test (id, shop_id) VALUES (2, 2); INSERT INTO test (id, shop_id) VALUES (3, 3); INSERT INTO test (id, shop_id) VALUES (4, 2); 

使用语句查询,目的是找出每个 shop_id 下第一个 id

SELECT * FROM test WHERE id IN ( SELECT `t`.`id` FROM ( SELECT e.* FROM test e ORDER BY e.id DESC ) t GROUP BY `t`.`shop_id` ); 

结果第四条记录也被查询了出来,而子查询语句如果单独拉出来执行,结果是 1,2,3 。这是为什么?

华为 mate40 pro 4G 要发布了,我大胆推测,很有可能上市后有“高人”破解出 5G

Posted: 26 Apr 2021 04:23 AM PDT

如题,立帖为证!

有报名软考高级信息系统项目管理师的吗

Posted: 26 Apr 2021 04:18 AM PDT

楼主报名了上半年的高级, 还没怎么看书.

还有 1 个月就考试了, 现在学还来得及不

有没有大佬报这个的, 求推荐学习方法和学习资料

elasticsearch 界的 mybatis

Posted: 26 Apr 2021 04:14 AM PDT

TestMapper 和 esdsl/test.esdsl 文件内容

https://github.com/manymobi/esdsl-core/blob/master/images/esdsl.png

@Mapper("esdsl/test.esdsl") public interface TestMapper {      JSONObject search(@Param("content") String content);      JSONObject search1(@Param("sssss") String sssss, @Param("list") List list);      @Query("{\"ssss\":#{sssss},\"integer\":#{integer}}")     @RequestMapping(method = RequestMethod.GET, value = "/v")     JSONObject search2(@Param("sssss") String sssss, @Param("integer") Integer integer);      @RequestMapping(method = RequestMethod.GET, value = "/v")     JSONObject search3(@RequestBody String sssss);  } 
==> search GET /index/${fulltext}/_search {   "query" : { 	#if(232=="rwerwe")     "match" : {       "id" :123133131223123212313131       } 	

No comments:

Post a Comment