Wednesday, October 13, 2021

V2EX - 技术

V2EX - 技术


钉钉是浏览器套壳吗

Posted: 13 Oct 2021 05:21 AM PDT

事情起因

群里前端说有个问题,就是输入框在输入中文时,如果做了长度限制,那么此时输入中文拼音,正常情况下会导致拼音无法正常输入,因为 web 上的文本框里,输入法打的字都会先以拼音形式出现在文本框里,再按空格之后再转换为汉字替换现在文本框中。 

发现

发现在 web 上如此,为什么 windows 不会呢?试了所有 QQ,微信,TG 等等常用客户端软件,都是打了字,输入框里并不会出现字,而是选择了之后直接出现在输入框里。 只有伟大的钉钉,表现和浏览器一模一样。 试了一些小众或者个人开发的客户端软件,也是和 QQ 这些一样,说明在 windows 客户端上,这应该是个很轻松 easy 的功能,所以猜测钉钉其实是个浏览器套壳。 

私有部署如何避免代码泄露?如何限制服务有效期?

Posted: 13 Oct 2021 05:06 AM PDT

需要给客户部署 web 服务到他们服务器,想给他一个注册码,填入后就可以获得一年有效期,到期后无法使用,就类似 jetbrains 的付费方式。

但是服务端代码如果是 js/python 这类脚本语言,代码都是明文的,不好做有效期的逻辑,别人直接改掉就没了,有什么办法做到呢?

用了几天 Windows 11,依旧很不适应,除了界面让人新鲜了点,并没有原本 win10 实用

Posted: 13 Oct 2021 04:56 AM PDT

1.首先界面任务栏改的很像 mac,各个方面而言,居中图标、打开动画、消息小红点、还有应用图标下面后台指示的小点、甚至连打开动画的掉帧都跟 Mac 保持一致,真的绝了

2.任务栏标签不能展开了,可能很多人 win10 就没有展开用,但我是展开在用的,他不能展开我就很不习惯,而且任务栏也不能改变位置了

3.右下角网络和音量整合成一个按钮变成类似 Mac 的控制中心,日期和通知也合成一个键变成通知中心,结果就是用鼠标控制音量的时候,以前点一下右下角音量就能用滚轮控制,现在要点开控制面板鼠标移到音量条位置才能控制,而日期点开也没有日程的显示了,也不能在日期地方直接添加日程,日程被移到了负一屏一样的地方,以小组件的形式显示。。简直了

4.右键设计了新的菜单,旧菜单虽然还在但是被隐藏在了新菜单的更多里,像我这种原来安装了一些右键插件的人就很麻烦,得点两次打开旧菜单,包括解压软件的菜单选项也旧菜单里,希望后期微软可以两个菜单整合在一起,把第三方的选项放到新菜单里

5.新文件管理界面还行吧,就是文件夹没有缩略图了,找文件的时候变得麻烦了。。文件夹一多就要看着文件名一个个看,以前文件夹有缩略图一眼就可以看到要打开那个文件夹比现在要方便太多

6.最后是开始菜单没有磁贴了,变成了常用 app 和推荐项目两栏。。很无语,这个开始菜单几乎就是被砍断手脚的样子,以前磁贴可以很方便的打开项目,包括文件夹也可以放在里面,所有应用放在左边要找也很方便,包括要找不常用的 app,也可以很方便的直接点到首字母筛选,现在 11 的开始菜单一点开只有小小的一个界面,一半是常用 app,一半是没有什么用处的推荐项目。。常用 app 一页还只能放 18 个,放多了你点开开始还要划下一页。。简直,开始菜单哪怕就按照原本的操作逻辑分成两列,左边一样全部 app 一排,右边去掉磁贴,换成常用应用,都比现在好用太多。。

折腾老设备的 HTTPS 请求问题

Posted: 13 Oct 2021 04:45 AM PDT

家里有一批老古董的嵌入式设备,但是证书已经都过期了。更新证书又太折腾了。

现在请求一些 HTTPS 请求,就会直接失败。

可不可以让笔记本开热点,然后这些旧设备连接笔记本的热点,让笔记本负责解析这些请求,转发到旧设备上?

MySQL 升级版本有什么坑吗?

Posted: 13 Oct 2021 04:28 AM PDT

目前使用的版本是 MySQL 5.5,32 位的。打算升级到 64 位的 MySQL 8 (或者 MySQL 5.7 )。

升级理由

  • 32 位版本内存有限,最大 4 个 G 。
  • 升级后性能也会好一些。

步骤

  1. 安装一个 MySQL 8 实例。
  2. 导入数据到 MySQL 8 并配置为从库。
  3. 主从同步一致后,停掉应用,将从库提为主库。
  4. 修改应用的数据库配置为主库,启动应用。

想问问:有什么坑?需要注意的地方?

没有 UPS 如何避免 BitLocker 加密时意外断电造成数据损失?以及 fTPM 和 dTPM 的安全性如何?

Posted: 13 Oct 2021 04:28 AM PDT

最近想给台式机的机械硬盘上 BitLocker,不巧的是我的 UPS 电源还坏了。3.5 寸的 4T 机械硬盘,加密起来我估计得两天,万一中途意外断电,我怕我的数据就挂了。

我有一个电池正常的笔记本电脑,可以把硬盘拆下来用笔记本执行加密,但是硬盘易驱线带 3.5 寸硬盘需要 DC12v 独立电源供电。我有个 PD 45w 移动电源,我本来打算买个 PD 诱骗线,用移动电源给硬盘供电。但是移动电源的充电和 PD 放电是同一个接口,供电的时候没法给移动电源充电。

有啥(廉价的)硬件或者软件方案,能避免 BitLocker 加密时意外断电造成数据损失吗?

另外,电脑本身支持固件 TPM(fTPM),我想买个独立 TPM 模块插上。从防范软件攻击和硬件物理攻击的角度分析,哪种方案安全性更好些?我查资料,似乎在攻击者可以物理接触到设备时,可以用专门设计的模块,窃听独立 TPM 的通信得到加密密钥?

google 首页的很多中文搜索链接进不去了。是哪个大哥举报成功了吗

Posted: 13 Oct 2021 04:21 AM PDT

现在做 PHP 的这么少吗?招不到人。

Posted: 13 Oct 2021 04:20 AM PDT

急需做 php 的同学啊,公司招了好久都没招到。

求多设备同步浏览器标签页的方案, Chrome 账号自动同步似乎行不通

Posted: 13 Oct 2021 04:14 AM PDT

迫于在公司开了很多网页,想回家接着看,有没有能自动同步当前设备打开的标签页的方案

Windows Server 2022 更流畅

Posted: 13 Oct 2021 03:57 AM PDT

用了几天 win11 现在正式版出来了感觉还行,但是没有 win server 2022 流畅,一点不卡顿 5udIgJ.md.png

实测 7 代 intel CPU 无 TPM 模块可以正常收到 Win 11 更新推送

Posted: 13 Oct 2021 03:47 AM PDT

5K5qJg.png

喜欢 11 但又担心收不到后续推送的可以放心冲了
做个 U 盘 PE 下个 iso 就能装 11

顺道一提,千万不要下什么大白菜、装机员之类
强烈安利知名无广告免费良心 PE —— 微 PE

等 windows 11 开始正式支持 android app 了,是不是可以把国内各种毒瘤转移到这个官方的安卓环境了

Posted: 13 Oct 2021 03:45 AM PDT

现在把各种国内程序全部放在 vmware 的虚拟机里面,电脑倒是没有性能负担,但要说不臃肿那是骗人的,而且如果 windows 虚拟机开着我这边还会导致看视频音视频不同步。 等正式支持 android 了,像什么 qq 、微信这种是不是就不用单独再开个虚拟机了,资源占用也会少许多

问一下大家数据库连接池一般设置多大呢

Posted: 13 Oct 2021 02:19 AM PDT

我用的框架默认的连接池大小,最小 0 个最大 10 个

然后程序里面有一个业务是定时结算,会同时并发查询,插入和更新多条数据。

我就想是不是提高连接池就能提升并发性能,

然后我就把连接池大小提高到了最小 32 个最大 100 个连接数量,但是程序启动明显变慢了。

而且内存占用也大了将近 30M,这种情况是正常的么。

数据库用的 Postgresql

SpringMVC,redirect 重定向的问题

Posted: 13 Oct 2021 01:44 AM PDT

  • 老系统是 SpringMVC 集成 shiro 做的权限认证。现在要改为集团统一认证。

  • 流程为:访问域名->跳转到登录接口->判断是否登录->跳转集团登录页->登录成功后 return 回来我们的系统首页。

  • 遇到的问题:集团登录页是个 https 的链接。登录的 Controller 最后==return "redirect:" + targetUrl;==。但是 targetUrl 改为http就可以正常跳转,如果是https虽然不影响使用,但是会一直重复调用 login 的接口。

  • 尝试使用 http://www.baidu.comhttps://www.baidu.com 也是一样的情况。现在不清楚问题到底是shiro引发的?还是SpringMVCredirect引发的。奇怪的是退出的接口不管是 http 还是 https 都是正常的。

  • 相关代码放到下面了,有懂得大手子麻烦帮忙看下给点建议!!!

// 登录接口 @RequestMapping(value = "${adminPath}/login", method = RequestMethod.GET)     public String e2Login(HttpServletRequest request,                           HttpServletResponse response, Model model) {         User user = UserUtils.getUser();         // 如果已经登录,则跳转到管理首页         if (user != null) {             if (user.getId() != null && user.getId() > -1) {                 return "redirect:" + Global.getAdminPath();             } else {                 return "error/403";             }         } else {             String e2state = java.util.UUID.randomUUID().toString();             X3.Service.X3App x3app = new X3.Service.X3App(request, response);             x3app.SetCookie("e2state", e2state);             String targetUrl = Global.getConfig("e2.LoginUrl") + "?client_id="                     + Global.getConfig("e2.ClientId")                     + "&returnUrl="                     + Global.getConfig("e2.ReturnUrl");             model.addAttribute("targetUrl", targetUrl);             return "redirect:" + targetUrl;         }     }       // 退出接口    @RequestMapping(value = "/logout")     public String adminLogout(HttpServletRequest request,                               HttpServletResponse response) {         logger.info("======================= logout====================");         X3App app = new X3App(request, null);         Subject subject = SecurityUtils.getSubject();         subject.getSession().removeAttribute(app.GetCookie("e2state"));         String returnUrl = WebUtilX.UrlEncode(Global.getConfig("u2.Callback"));          String logoutUrl = Global.getConfig("u2.LogoutUrl") + "?ClientId="                  + Global.getConfig("u2.ClientId") + "&ReturnUrl=" + returnUrl;          String returnUrl = WebUtilX.UrlEncode(Global.getConfig("e2.ReturnUrl"));         String logoutUrl = Global.getConfig("e2.LogoutUrl") + "?ClientId="                 + Global.getConfig("e2.ClientId") + "&ReturnUrl=" + returnUrl;         subject.logout();         return "redirect:" + logoutUrl;     } 
// shiro 过滤器  <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">         <property name="securityManager" ref="securityManager"/>         <property name="loginUrl" value="${adminPath}/login"/>         <property name="successUrl" value="/index"/>         <property name="filters">             <map>                 <entry key="authc" value-ref="formAuthenticationFilter"/>                 <entry key="oauth2Authc" value-ref="oAuth2AuthenticationFilter"/>             </map>         </property>         <property name="filterChainDefinitions">             <value>                 /report/postContent/** = anon                 /studentlist/** = anon                 /courseInfo/** = anon                 /studyInfo/** = anon                 /studyservice/** = anon                 /newwork/** = anon                 /workflow/** = anon                 /static/** = anon                 /userfiles/** = anon                 /servlet/** = anon                 /app/**=anon                 /demo/**=anon                 ${adminPath}/login = authc                 /e2/callback = oauth2Authc                 /admin = anon                 ${adminPath}/logout = authc                 /** = user             </value>         </property>     </bean> 

并行并发进程线程协程 GIL 概念简明解释笔记

Posted: 13 Oct 2021 01:27 AM PDT

根据参考文章做了一些简要的笔记和概括 更多请参考引用部分

一、并发(Concurrency)和并行(Parallel)的区别

并发和并行是相近的概念。和并发所描述的情况一样,并行也是指两个或多个任务被同时执行。但是严格来讲,并发和并行的概念并是不等同的,两者存在很大的差别。

简单的一张图可以简单明了的理解 并行和并发

直观来讲,并发是两个等待队列中的人同时去竞争一台咖啡机。现实中可能是两队人轮流交替使用、也可能是争抢使用——这就是竞争。

而并行是每个队列拥有自己的咖啡机,两个队列之间并没有竞争的关系,队列中的某个排队者只需等待队列前面的人使用完咖啡机,然后再轮到自己使用咖啡机。

可以这样理解: 并发是一个处理器同时处理多个任务,而并行多个处理器或者是多核的处理器同时处理多个不同的任务。前者是逻辑上的同时发生( simultaneous ),而后者是物理上的同时发生。

二、进程

进程(英语:process ),是指计算机中已运行的程序。进程曾经是分时系统的基本运作单位。

它包括一些具体内容比如 独立的内存、系统中独立的 PID 等。

在时分复用系统中,操作系统在不同的进程之间进行上下文切换,来达到 "并发"的效果。

我们只需要简单的知道,他是一个基本单位,它的切换在操作系统之中,并且他的上下文切换相当的占用时间、和占据内存。

Ruby 的一些框架是通过 进程+fork 的方式工作的,比如 Sidekiq 。以 fork 进程工作的会存在一切缺点:

  • 切换上下文时间相对较长
  • 上下文的内存相对较大
  • fork 的子进程,当父进程死掉,会成为僵尸进程,等待系统回收(占用内存)

三、线程

线程(英语:thread )是操作系统能够进行运算调度的最小单位。大部分情况下,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

然后操作系统也会在进程之中,调度内部的线程,假设是多个线程,会在其中切换不同线程执行。

相对进程,线程弥补了进程切换的一切问题

3.1 多线程的意义

多线程的优点

  • 共享内存
  • 切换上下文时间段
  • 占用内存少
  • 父进程关闭,子进程自动关闭
  • 任务分片

多线程的意义和操作系统的时间切片其实是相当的。 如果没有多线程,我们的程序会是如何?

以小汽车移动举例子,如下两个颜色的小汽车,A 、B,如果我们想移动他们,只能顺序移动。

如果是支持多线程程序,A 、B 可以同时移动。比如一些游戏的坦克大战多个坦克运动;比如你可以在一个程序中既能聊天还能播放音乐比如浏览器等等。

3.2 线程存在的问题

  • 竞争带来的复杂问题,涉及到锁

就像前面,并行并发 提到的咖啡机模型,多个线程,他们在使用 CPU 会产生竞争问题,分配给谁?一般是交给操作系统来调度。但是当他们去访问同一个内存读写的时候,由于无法保证顺序,常常会出现问题——也就是线程不安全。

举个 Ruby 的例子

a = 0  threads = (1..10).map do |i|   Thread.new(i) do |i|     c = a     sleep(rand(0..1))     c += 10     sleep(rand(0..1))     a = c   end end  threads.each { |t| t.join }  puts a 

这段代码要实现的功能很简单,只是把变量 a 累加 10 次,每次加 10,并且开了 10 个线程去完成这个任务。正常情况下我们期望的值是 a == 100,然而事实却是

 > ruby a.rb 10  > ruby a.rb 10  > ruby a.rb 30  > ruby a.rb 20 

出现这种情况的原因是,当我们的操作执行到一半的时候其他线程介入了,导致了数据混乱。这里为了突出问题,我们采用了 sleep 方法来把控制权让给其他线程,而在现实中,线程间的上下文切换是由操作系统来调度,我们很难分析出它的具体行为。

现实中为了解决问题,我们需要加锁

 a = 0 mutex = Mutex.new  threads = (1..10).map do |i|   Thread.new(i) do |i|     # 加锁     mutex.synchronize do       c = a       sleep(rand(0..1))       c += 10       sleep(rand(0..1))       a = c     end   end end  threads.each { |t| t.join }  puts a 

这样可以保证结果

> ruby a.rb 100  > ruby a.rb 100 

四、GIL

在 Python 、Ruby 中都存在一个东西叫做 GIL (全局解析器锁)。

GIL 起到什么作用呢,以 Ruby 的 MRI 解释器为例,存在 GIL 的 MRI 只能够实现并发,并无法充分利用 CPU 的多核特征,实现并行任务,进而减少程序运行时间。

在 MRI 里面线程只有在拿到 GIL 锁的时候才能够运行,即便我们创建了多个线程,本质上也就只有一个线程实例能够拿到 GIL,如此看来某一时刻便只能有一个线程在运行。

可以考虑下面这样的场景:

老师给小蓝安排了除草任务,小蓝为了加快速度呼唤了好友小张,然而除草任务需要有锄头才能进行。为此,即便有好友相助但锄头却只有一把所以两个人无法同时完成除草的任务,只有拿到锄头使用权的一方才能够进行除草。这把锄头就像是解析器中的 GIL,把小张跟小蓝想象成被创建的两个线程,当两个人的工作效率一样的时候,受限于锄头这个约束并无法同时进行除草任务,只能够交替使用锄头,本质上并不会减少工作时间,反而会在换人的时候(上下文切换)耗费掉一定的时间。

在一些场景下创建更多的线程并不能真正地减少程序的运行时间,反而有可能会随着进程数量的增加而增加切换上下文的开销,从而导致程序变得更慢。

五、协程

线程是由操作系统来控制切换的。而系统的切换是一种通用的策略,在一些场景下会没必要的浪费时间。

协程 就是一种让程序员去手动切换,这个过程就像 线程之间 可以互相协作 来完成任务,避免不必要的切换。具体如何切换、交给谁,这个根据实际的任务,程序员来判断。

比如 小明做 语文、数学、英语三节课。系统调度采用的是通用策略,他可能的选择是在三个任务之间均衡。 系统不停地在切换,实际上这种切换浪费了大量的时间。

我们现实中会这样做,因为这样是更优的选择。这样就减少了无意义的切换提高了效率。

比如 IO,当我们遇到 IO 的时候,有几种情况:

  1. 单线程就只能等待 IO 完成再继续。

  2. 系统无差别调度,工作线程和 IO 线程之间切换。

  3. 协程手动调度,遇到 IO 之后,直接转移控制权给其他代码。 这样可以有目标的去编写非阻塞、吞吐量大的程序。

六、解放 GIL 充分利用多核

以 Ruby 为例,想要去除 4 个人干活 共用一个锄头的 GIL 的尴尬事情。可以选择使用去除 GIL 的解释器。 除了 GIL 的实现,其中包括 Rubinius 以及 jruby 他们的底层分别用的是 C++以及 Java 实现的,除了去除 GIL 锁之外,他们还做了其他方面的优化。某些场景下他们都有着比 MRI 更好的性能。

这就需要你的程序里面避免出现竞争条件。

一些好的例子是 比如 Python 的 Flask 框架,他使用对不同线程 ID 建立起一个 map 保存 request 、response 上下文巧妙地实现了线程隔离,在处理 web 的这块可以做到线程安全。

还有一些专门解决多线程的模型

6.1 Actor 模型 Ractor (合成词 Ruby Actor )并发模型

Ractor 像 Go 、Erlang 的并发模型看齐

具体的实现

6.2 Guilds 并发模型

6.3 事件驱动模型

事件驱动这是一个像 JavaScript 的原理的一个实现,使用了单线程 eventloop 的方式进行工作,可以进行大量的 IO,而不需要担心线程问题。

具体实现

6.4 进程+fork, 让操作系统完成调度

这是一种补充,这种方案扎根于 Unix 、Linux 操作系统。 可以充分利用多核新。可以通过 标准库 实现。但是会比 上述线程方案要重。因为进程的内存是隔离的所以不会竞争。

原理可以参考

具体实现

大名鼎鼎的 unicorn

puma 也使用了这个模型。但是 puma 同样也拥有多线程

参考

并发并行部分

进程部分

线程部分

GIL 部分

协程部分

其他

  • Ruby Puma 允许在每个进程中使用多线程, 每个进程都有各自的线程池. 大部分时候不会遇到上面说的竞争问题, 因为每个 HTTP 请求都是在不同的线程处理.

  • Python 的 Flask 设计巧妙在于使用一个 map 做到了线程隔离,每个线程都有独立的 request 、response 上下文也可以做到巧妙地不同现场处理。

  • Python 的 Tornado 使用了协程来写出非阻塞的吞吐量更高的 web server 。

  • Ruby 中去除 GIL 的解释器:除了 GIL 的实现,其中包括 Rubinius 以及 jruby 他们的底层分别用的是 C++以及 Java 实现的,除了去除 GIL 锁之外,他们还做了其他方面的优化。某些场景下他们都有着比 MRI 更好的性能。

Ruby China 上的讨论

我的 BLOG

能认为嵌套了转义字符(或者其他类似操作)的表达方式是完备的吗?

Posted: 13 Oct 2021 12:44 AM PDT

在比如 python 的文本处理中,有些符号有特定意义,在文本中我们选择转译\,从而达到输出原字符的目的

但是如果我们就想输出,转译这个字符,那就得再转译。 这样如果从理论上,是否会出现混淆不清的情况。

所以最终的问题是,在极端情况下,是否给定任意的字符串,都能在编程语言中正确地按照人们心愿地输出出来?

请教 MySql 多表 join 怎么优化好

Posted: 13 Oct 2021 12:15 AM PDT

接到一个不确定+复杂的需求(对我而言),背景是: 现在后台有一个用户表 user ( id,orderId),会员订单表 order(id,type,expireTime),用户每日登录日志表 log(id,uid,createdAt);表的行数基本在 100 万(订单表 10 万)。 现在需要可能是:

  1. 找到最近 10 天登录的用户
  2. 或者,最近 10 天登录的会员用户(根据有没有订单 id )
  3. 或者,最近 10 天登录的过期会员用户 ...others 根据条件拿到用户 id 去做其他任务,就是条件可能不一样。
    根据我仅有的 MySql 知识和这两天的 Google,我试了一下实现是,
select user.*, order.*, max(log.createdAt) from user join order on user.orderId = order.id -- 如果要过期用户,这里加一个 expireTime 判断 join log on log.uid = user.id and log.createdAt > '2021-10-01 00:00:00' group by user.id -- 这是配合 join log on 获取最新登录一次的时间 

现在我的问题是:

  1. 各位大佬遇到这种需求是不是这样的,如果需求增加或变了再调整 sql 的拼接(好像无法实现一个大的逻辑去嵌套小的条件适应需求变化?)
  2. 这里一共需要三个表 join,我造了 100 万行的数据测试,发现执行一次大概要 15 秒左右。查了资料,看到说不要用 join,或者根据让小表驱动大表,建索引等操作,这些都在试(学);不过还是问一下大佬有没有建议?

Ubuntu Desktop 作为服务器系统有必要定时重启吗

Posted: 12 Oct 2021 10:38 PM PDT

家里的 NAS 因为便于操作所以用了 Ubuntu Desktop 作为操作系统,想问一下大家有必要定时重启吗?

云服务器从来没重启过,不知道 Desktop 版用不用像 Windows 一样定时重启有助于恢复性能。

Windows Server 2022 DELL 笔记本的无线网卡如何驱动?

Posted: 12 Oct 2021 10:15 PM PDT

无线网卡 QCA9377,WiFi 之前 Server 2019 可以正常工作,现在升级到 2022 无法工作,确认已添加 Wireless LAN Service 组件。

对象存储 OSS 的一些疑问

Posted: 12 Oct 2021 09:59 PM PDT

首先,我是业余选手。

我看了阿里云的 oss,感觉贵得一批啊。

100GB 单存储空间 99 元 /年,还不算流量?

但外流流量包 100GB 怎么就 441 元了?也就是说我单单上传上去再下载回来就要花 540 块了???

这我哪敢用啊,现在单单用图床,8 个图片,每月流量 2GB 了都,这还了得。

访问百度 被电信拦截 显示 safe.zj.189.com 响应时间过长怎么解决

Posted: 12 Oct 2021 09:46 PM PDT

如何建立 Class 与 Xib/Storyboard 之间的一对多/多对一的关系?

Posted: 12 Oct 2021 08:58 PM PDT

为了更好的复用同一种类型的对象,避免出现冗余出多份代码,有的时候就会需要对 Class 对象与 Xib 对象之间建立 1:n 或 n:1 的关系。

情形 1. 1 个 Class 对应 n 个 xib:比如常见的电商 App 的商品列表页面,可以呈现为列表模式或网格模式,这种就是一个 ViewController 通过创建不同的 Cell 的 Xib 来实现。

情形 2. n 个 Class 对应 1 个 xib:最近我就碰到这种需求,但不知道如何好的做? 2 个不同的 ViewController,界面长得完全一样(可以共用 1 个 xib ),只不过 2 个 ViewController 操作的数据不一样(数据操作代码分布在 ViewController 文件的多个地方),目前想到 2 想法:
1. 能否在 1 个 xib 中指定多个不同的 File Owner 来实现,要是可以这种比较简单直接。
2. 通过一种代码结构 /设计模式来实现?

请问以下 k8s 安装 Metrics Server 一直报错是为啥?

Posted: 12 Oct 2021 08:30 PM PDT

k8s 版本 1.22.2

metrics 版本 0.5.1

报错信息:

Warning  Unhealthy  93m   kubelet            Liveness probe failed: Get "https://10.0.1.20:443/livez": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 

已配置 - --kubelet-insecure-tls- --enable-aggregator-routing=true

一直无法成功启动,有朋友知道是为什么吗?

这里搞 AI 的多吗,问个问题

Posted: 12 Oct 2021 12:40 PM PDT

一篇论文的代码复现了但又没完全复现是可能啥情况啊。。。。。

一篇论文,用到了 pytroch,transformers 一些预训练模型,以及 apex 的半精度加速啥的,反正主要就这几个东西。

我甚至邮件找了作者,要到了他的 conda 环境

但是!前几天用这个环境,运行代码可以复现,今天起来发现,复现不了了?????变成了完全不同的一个结果,而且这个结果又是稳定复现的。

试过了 conda 环境重新导入,重启机器,github 重新拉代码,清空预训练模型缓存啥的,死活就是不行。

我向来是不相信玄学的,但是环境和代码我是真的一点都没动过,也不会有其他人动(除非有个黑客专门潜入我的服务器搞事情?)

请教个 pycharm 远程调试代码的问题

Posted: 12 Oct 2021 11:42 AM PDT

大家好,我目前有个工作环境,是接手别人的,架构呢,暂时不能改动

1,上手原来的代码和其他 mssql 服务都是放在 win2012 上边运行的,然后他是直接远程桌面上去调试代码的
2,我日常工作环境是 mac,我自己的项目都是在 centos7 跑的,所以我很多时候都是 pycharm 远程去调试服务器的代码

但是对于 win2012 才能用 pycharm 远程调试呢?

我现在还有个啧中的办法就是,本地写好了,把整个文件 cp 进去。。。再运行,但是觉得实在是不方便,而且远程桌面修改代码,也实在不太爽快

老生常谈, mysql 业务表的多语言怎么设计的?

Posted: 12 Oct 2021 09:50 AM PDT

网站需要实现国际化,内容都是多语言的,业务表里面的内容也需要分多语言,请问一般怎么设计?

office2019 插件加载项每次删除了,又蹦出来怎么解决,尤其是百度网盘

Posted: 12 Oct 2021 09:24 AM PDT

想知道有阅读类 app 针对 ltpo 做优化吗,比如停止滑动时瞬间帧数掉落到 1hz 这样的

Posted: 12 Oct 2021 03:43 AM PDT

No comments:

Post a Comment