上篇文章「为什么我们家里的IP都是192.168开头的?」提到,因为IPv4地址有限,最大42亿个。...其实他们都是同一个数值,只不过大小端不同,读出来的值不一样。就好像同样的数字345,反着读就成了543。这是为了兼容不同操作系统(比如linux和Windows)下大小端不同的情况。...那问题就来了,有没有办法让外网机器访问到内网的服务? 有。 大家应该听过一句话叫,"没有什么是加中间层不能解决的,如果有,那就再加一层"。 放在这里,依然适用。...说到底,因为NAT的存在,我们只能从内网主动发起连接,否则NAT设备不会记录相应的映射关系,没有映射关系也就不能转发数据。...像上面提到的服务器x,你也不需要自己去搭,已经有很多现成的方案,花钱就完事了,比如花某壳。 内网穿透 到这里,我们就可以回答文章标题的问题。 为什么我在公司里访问不了家里的电脑?
而容器中也是由init进程直接或间接创建了Namespace中的其他进程。 linux信号 而为什么不能在容器中kill 1号进程呢?进程在收到信号后,就会去做相应的处理。...运行命令 kill -9 1 里的参数“-9”,就是指发送编号为 9 的这个 SIGKILL 信号给 1 号进程。 为什么在容器中不能kill 1号进程? 对于不同的程序,结果是不同的。...如果信号被忽略了,那么 init 进程就不能收到指令了。 想要知道 init 进程为什么收到或者收不到信号,就要去看 sig_task_ignored()的实现。...(force && sig_kernel_only(sig)):如果是同一个Namespace发出的信号,值为0。所以这个条件总是满足。...0000000000004000 [root@043f4f717cb5 /]# kill 1 # docker ps CONTAINER ID IMAGE COMMAND CREATED 重点总结 “为什么我在容器中不能
但如果有一天,你发现我写了这样一个类: class People: def say(self): print(f'我叫做:{self.name}') def __new...__(self): raise Exception('不能实例化这个类') kingname = People() kingname.say() 一旦初始化就会报错,如下图所示:...一个不能被初始化的类,有什么用? 这就要引入我们今天讨论的一种设计模式——混入(Mixins)。 Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。...显然,这样写会报错,因为两个类的实例是不能比较大小的: 但在现实生活中,当我们说 某人比另一个人大时,实际上是指的某人的年龄比另一人年龄大。...混入: 不能包含状态(实例变量)。 包含一个或多个非抽象方法。 参考资料 [1]钻石继承: https://en.wikipedia.org/wiki/Multiple_inheritance
当然了,bad case分析这块我也聊了很多,多分析能发现其中的端倪,知道模型需要什么,该怎么处理,我再放一遍在这里,希望能好好阅读。...至于训练集,首先要说的是训练集内部的问题,其实还是数据的数量和质量问题: 学习资料和练习题要足够,才能让模型学得会,学得好。 数据分布问题,不能偏科,各个类型的数据最好都能覆盖。...这里背后的逻辑可以参考我这篇文章: 心法利器[45] | 模型需要的信息提供够了吗 训练问题 针对训练问题,其实也就是一个经验的问题了,多弄其实问题就会小很多,大家可以多去看各个论文使用的超参,一般调的差不多基本都不会有的...首先要做基线,一般是考虑折腾这个CLS,而在下游加插件的时候,也要注意不能让BERT模型被学走,注意调整学习率、trainable,同时也可以结合MLM任务来维持模型的稳定,平衡BERT原有的基础知识与实际场景问题的差距...而文章本身的输出并非是按照这个思路走,而是从一些大家经常问的点深入来讨论,希望能从我的角度和风格来思考和回答问题。
题图摄于广州番禺 本文记录一次关于隐私保护的事情。 近日,我去了趟某运营商的营业厅,开通一个新的手机号。入门时,扫了场所码,显示的是绿码。...营业员在帮我办理业务时,除了拍照我的身份证件外,还说要留存我的健康码和行程码。...这个要求就有点奇怪了,尽管我两个码都是正常,但作为从事隐私信息保护工作的我,对涉及自己隐私数据的事情,觉得还是要和他掰斥一下。 首先,我问他为什么需要留存我的两码?...因为我进营业厅的时候扫过各种健康码的,我于是给他扣了个大帽子:过度防疫(另一个类似的帽子是“层层加码”)。...因为我清楚地记得,行程码在使用时,用户只授权了用于防疫目的。至于其他目的,对不起,我没授权你用,就算你的理由多么冠冕堂皇,也不能随便给你。 至于他们留存我的健康码,更连个正当的理由都没有。
大家好,我是小❤,一个漂泊江湖多年的 985 非科班程序员,曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。 1....2.2 为什么要读写分离 1)防止并发 从上图我们可以看出,数据是由主节点向从节点单向复制的,如果主、从节点都可以写入数据的话,那么数据的一致性如何保证呢?...runID:每个 Redis 实例的唯一标识,当主从复制进行时,该值为 Redis 主节点实例的ID。由于首次同步时还不知道主库的实例ID,所以该值第一次为 ?...offset:从库数据同步的偏移量,当第一次复制时,该值为 -1,表示全量复制 主服务器收到 PSYNC 命令后,会创建一个专门用于复制的后台线程(replication thread),然后记录从节点的...所以我们需要根据业务量和实际情况来设置 repl_backlog_buffer 的值。 4. 小结 面让架构易于扩展,另一方面防止单体故障:当主库挂了,可以立即拉起从库,不至于让业务停滞太久。
曾几何时,我觉得很兴奋,在如此短的时间内就可以做到这样的高度,让我十分的开心。开发出的内容也完全符合校内应用的需求。我变成了一个别人眼中的“大师”。 但事情并没有往想象的地方发展。...框架用的时间久了之后就发现了一个问题:我真的有学习过吗?我学的内容真的有用嘛,这些框架内的东西能对我今后有帮助吗,当然,这种想法不是一天形成的,还有一个小的故事。...但当有一天在讲授开发经验的时候,当我当着大家的面真的静下心来写我需要展示的一个类的时候,以前用了这么多的框架,我发现在这么多人面前的我已经几乎写不出来一个正确的类了!!...于是我又开始新的一轮学习,看大量的书籍,有一天我重新打开Yii框架在我当时看起来很难理解的代码的时候我发现:我居然有点明白它的工作原理,知道整体的架构了!...如今的框架图.png 之后的工作就是让框架更加的丰满,不敢说比得上一些主流的框架,说实话根本不能够和他们相比,无论从结构、思考还是思考上,编出主流框架的他们才是真正的大师。
那么在业务访问时,必须等这个过期任务执行结束,才可以处理业务请求。此时就会出现,业务访问延时增大的问题,最大延迟为 25 毫秒。 而且这个访问延迟的情况,不会记录在慢日志里。...但以上这些逻辑都是在访问 Redis 时,真正命令执行之前执行的,也就是它会影响我们访问 Redis 时执行的命令。...所以在部署 Redis 进程时,如果需要开启 RDB 和 AOF 重写机制,一定不能进行 CPU 绑定操作!...下面就针对这两块,分享一下我认为比较合理的 Redis 使用和运维方法,不一定最全面,也可能与你使用 Redis 的方法不同,但以下这些方法都是我在踩坑之后总结的实际经验,供你参考。...总结 以上就是我在使用 Redis 和开发 Redis 相关中间件时,总结出来 Redis 推荐的实践方法,以上提出的这些方面,都或多或少在实际使用中遇到过。
有的时候,面对一个有缺失值的数据,我只想赶紧把它插补好,此时的我并不在乎它到底是怎么缺失、插补质量如何等,我只想赶紧搞定缺失值,这样好继续进行接下来的工作。 今天这篇推文就是为这种情况准备的!...但是它有一个最大的问题,不能一次性填补整个数据集的缺失值。 比如我有一个数据集,我知道它有缺失值,但是不知道在哪些列,但是我只想快速填补所有的缺失值,这时候这个R包就点力不从心了。...关于R语言中的缺失值插补,大家遇到最多的教程应该是mice包,不过我不太常用,所以就不介绍了。 一般来说,如果只是简单的均值或中位数填补的话,不需要R包,自己写一行简单的代码就搞定了。...我不想知道这些缺失值的具体情况,只想立马把它们填补好,不然没法进行下一步操作!...8.000000 3.00 3 ## 8 2.00 5.000000 4.00 3 ## 9 2.28 6.000000 4.00 3 ## 10 1.00 2.000000 4.15 2 以上就是我常用的缺失值插补
比较AsyncTask、Volley、Retrofit三者的请求时间 使用 单次请求 7个请求 25个请求 AsyncTask 941ms 4539ms 13957ms Volley 560ms 2202ms...Retrofit2.0 完胜 使用 添加依赖 build.gradle compile ‘com.squareup.retrofit2:retrofit:2.0.0-beta4’ 请求范例 以淘宝的ip...,这里表示需要查询的字段为ip //ResponseBody是Retrofit自带的返回类, @GET("http://ip.taobao.com/service/getIpInfo.php...ip") String ip); } ---- 调用接口 //创建Retrofit实例 Retrofit retrofit = new Retrofit.Builder() //当我们的@...map,注解用@QueryMap @GET("url") Call getInfo(@QueryMap Map params); //post的请求参数是放在请求体中的
本题所运用的知识点,我们之前都讲过了,细细品味一波 513.找树左下角的值 给定一个二叉树,在树的最后一行找到最左边的值。 示例 1: 示例 2: 思路 本地要找出树的最后一行找到最左边的值。...我们来分析一下题目:在树的最后一行找到最左边的值。 首先要是最后一行,然后是最左边的值。 如果使用递归法,如何判断是最后一行呢,其实就是深度最大的叶子节点一定是最后一行。...(TreeNode* root, int leftLen) 有的同学可能疑惑,为啥不能递归函数的返回值返回最长深度呢?...其实很多同学都对递归函数什么时候要有返回值,什么时候不能有返回值很迷茫。 如果需要遍历整颗树,递归函数就不能有返回值。如果需要遍历某一条固定路线,递归函数就一定要有返回值!...if cur.right: queue.append(cur.right) return result 旧文链接:二叉树:我的左下角的值是多少
看完视频你就明白为什么不能出门了,千万不要放松警惕!(@Ele实验室 ) 在家憋了一段时间的人们,耐心也在一点一点消磨中。很多人已经忍不住开始想蠢蠢欲动了。...他们总有一套自己的理论:我们城市才一点确诊病人,而且在距离我们很远的地方,我就出去一会儿,哪有那么巧合,就感染上了。没事儿的!大街上都没人,我戴着口罩又没事。...疫情的防控工作的防控点或者是成功与否主要在于感染人员是否戴口罩、医院里的隔离床位(或者是自我隔离位)、人口的流动。...因此通过这一次的疫情防控,为了你、我、他,请以后感冒发烧生病之后,能够带个口罩,减少传染率。因为不知道你体内的这一个病毒威力如何。 ?...因此一个疫情发生,必须依靠强大有力的政府比如中国,和广大的医院医生护士等伟大的工作者们的努力,所以平时请尽量的尊重他们的这个职业。 ?
问: 我有一个调用自己的函数: def get_input(): my_var = input('Enter "a" or "b": ') if my_var !...: Type "a" or "b": a got input: a 但是,如果我输入别的东西,然后输入 "a" 或 "b",我会得到这样的结果: Type "a" or "b": purple You...Type "a" or "b": a got input: None 我不明白为什么 get_input() 函数返回的是 None,因为它本应只返回 my_var。这个 None 是从哪里来的?...我该如何修复我的函数呢? 答: 它返回 None 是因为当你递归调用它时: if my_var != "a" and my_var !...没有返回那个值。 因此,尽管递归确实发生了,但返回值却被丢弃了,然后你会从函数末尾退出。
第二次执行这个程序也没问题,但奇怪的是,此时第一次执行的那个程序却被kill掉了: ? 这是为什么呢?...这也就解释了为什么上面第二次运行该程序时,mmap是没有报错的。...上面我们还提到oom_score_adj有一个特殊值为OOM_SCORE_ADJ_MIN,即-1000,表示该进程不能被kill掉。 各进程的oom_score_adj的值默认为0。...比如,我们可以通过 echo -1000 > /proc/[pid]/oom_score_adj 命令,将oom_score_adj的值设置为-1000,即该进程不能被kill掉。...另外也欢迎关注我公众号,主要是结合实际,讲一些linux内核相关的知识。
前言 很早之前,就打算写这一篇文章了(其实有很多源码分析的文章打算写,但是自己太拖延了导致很多文章搁浅了)。我为什么要写这一文章呢?...事情的缘由是同事在SpringBoot项目中有一个A类继承HibernateDaoSupport,但是程序运行总是抛出没有成功注入SessionFactory的错误,后来我debug Spring源码解决了这个问题...这个错误的原因是A类的RootBeanDefinition中的autowireMode的值为0,在AbstractAutowireCapableBeanFactory类中的populateBean方法中没有执行到...属性 4.假设我们通过某种手段,使其autowireMode值为1,就会调用autowireByName方法,会获取到MySessionFactory属性,并通过getBean()方法获取MySessionFactory...将属性的值注入到MyBaseDao中。
从 ES2015 开始,对我代码影响最多的功能是解构、箭头函数、类和模块系统。 截至 2019 年 8 月,一项新提案 optional chaining 达到了第3阶段,这将是一个很好的改进。...这就是我喜欢 optional chaining 的原因。 2.1 数组项 但是 optional chaining 功能可以做更多的事情。...defaultValue 的结果为defaultValue, 否则表达式的值为variable 的值。...rightHandSide 中遇到无效值,右侧访问器的评估就会停止。这称为短路。 我们来看一个例子: const nothing = null; let index = 0; nothing?....为什么我喜欢它? 我喜欢 optional chaining 运算符,因为它允许从嵌套对象轻松访问属性。它可以减少通过编写样板文件来验证来自访问器链的每个属性访问器上无效值的工作。
作为站长,最不想看到的就是网站被封了,封禁不仅影响网站业务,甚至会有罚款和监禁的风险。...内容审核服务提供了以下两种使用方法,可以覆盖不同的使用场景: 自动审核 配置自动审核,可以自动检测存储桶中新上传的文件,并支持自动冻结(禁止公有访问)已检测的违规内容。...配置自动审核的方式如下: 历史数据审核 历史数据审核支持创建任务对存储桶中已有的文件进行一次性的批量审核,并支持自动冻结(禁止公有访问)已检测的违规内容。...上述两种审核配置都支持用户自定义审核策略,通过设置自定义策略可以定制涉黄涉政等个性化场景的审核;审核后支持按照指定的分数范围进行冻结,智能机审+精确人审的方式帮你有效避免违法内容的传播;审核结果可以通过配置的回调链接返回给用户...查询审核任务:通过发起任务时获取到的任务ID,直接查询对应任务ID的网页审核结果。审核结果中包含了审核是否成功、网页的审核处理建议、违规的图片和文字等。
第二次执行这个程序也没问题,但奇怪的是,此时第一次执行的那个程序却被kill掉了: ? 这是为什么呢?...这也就解释了为什么上面第二次运行该程序时,mmap是没有报错的。...上面我们还提到oom_score_adj有一个特殊值为OOM_SCORE_ADJ_MIN,即-1000,表示该进程不能被kill掉。 各进程的oom_score_adj的值默认为0。...这也就解释了,为什么上面在第二次执行那个程序时,被kill掉的是第一次执行的那个进程,而不是第二次执行的进程,因为第一次执行的那个进程,占用的物理内存更大。...比如,我们可以通过 echo -1000 > /proc/[pid]/oom_score_adj 命令,将oom_score_adj的值设置为-1000,即该进程不能被kill掉。
还有一个Child的子组件,红底黑字。 那么实际渲染出的样式是什么样子的呢。如下图: ? 实际看到的效果确实蓝底白字与红底白字,为什么与写的代码有出入呢。...究其原因 为什么子组件的字体颜色不是黑色确是白色? ?...为什么同样.parent .component 和.child .component是父级覆盖子级? ?...把CSS划分模块,自动为类名后面生成一个hash值保证类名全局唯一。 CSS Modules的使用 使用create-react-app创建项目,修改webpack.config.js ?...最后 文章首发于:为什么我的样式不起作用? 参考:浏览器渲染原理与过程 参考:CSS选择器从右向左的匹配规则 DEMO地址
领取专属 10元无门槛券
手把手带您无忧上云