区别3 因为 run 方法是普通方法,而普通方法是可以被多次调用的,所以 run 方法可以被调用多次;而 start 方法是创建新线程来执行任务,因为线程只能被创建一次,所以它们的第三个区别是:run...方法可以被调用多次,而 start 方法只能被调用一次。...为什么start不能被重复调用?...0,也就是是否为新建状态 NEW,如果不等于新建状态,那么就会抛出“IllegalThreadStateException”非法线程状态异常,这就是线程的 start 方法不能被重复调用的原因。...调用次数不同:run 方法可以被重复调用,而 start 方法只能被调用一次。
真正的原因是我们国内的很大一部分程序猿只是工具的使用者,不会去思考工具的产生和原理,用惯了一个高效的工具就被这个工具套牢成为奴隶,而国外的程序猿跟多的会去思考和专研这个工具的产生和原理,然后可能会自己优化出个...无论是作为吃瓜群众,还是工具使用者的你,难道就不能做点除了为别人喝彩以外的事情吗? 你甘愿仅仅做帮助他人实现人生巅峰的助推器?你甘愿一辈子当绿叶去衬托这朵大红花?...这些工具确实是能倍速改善工作效率,但是,这是一种假象。因为,你被巨大的高效所蒙蔽双眼。当你离开这个工具时,你发现你什么都不会,什么都不是。...这就是为什么高度模块化公司出来的人,能力上似乎并不高的原因。 可是要了解模块化上层开发者的逻辑真的太难了,就一般人而言,压根行不通的,所以只能应用别无他法。这个想法也对,也不对。...为什么我们想不到,而他想到并付出行动?我想这个问题,我们应该好好去思考一番。 其次,通过深度思考,将这套流程化思维内化,嫁接到自己的工作中去。换句话说,通过别人的模块化工具建立自己的模块化工具。
选择的悖论“TED演讲地址 核心内容:我们为什么要工作?我们为什么要放弃既快乐又刺激的安逸生活,每天早晨睡眼惺忪地从舒适的床上挣扎而起?多么愚蠢的问题啊。我们工作当然是因为我们要养家糊口。...因为我能想象到这样一个场景,恨铁不成钢的老板或管理者们偶然看到了这本书,翻了一翻觉得如获至宝,心里想我每天都是带着使命感在工作的,为什么我的员工们不能和我一样也能用使命感来工作。...其实好工作与坏工作就工作职责本身没有太大的区别,更多地是我们赋予了工作何种额外的意义。同事都把工作视为工作,我却不这么看。老板要将一份好工作转化为坏工作,并不难,关键在于假设工人不愿待在这里就可以了。...我是个行动者,这些硬件的成本即便是刚工作的毕业生也是工资的几分之一就可以承受的了,从经济思维的角度这点投入能够换回每天开心幸福的工作,为啥要天天和公司较劲呢。...在《混乱》这本书里,对办公室的装饰进行了一个有趣的实验,结果发现如果员工可以自主摆放桌椅,随便折腾的办公室工作效率显著高于其他办公室。因为员工会有对工作的自主权,而这种自主权可以激发他对工作的初心。
说起来,Babel 也是基于 AST 实现的代码分析和转换,但是却不能检查和修复格式的问题,这是为什么呢?为什么 Eslint 可以检查格式而 Babel 不可以呢?...代码上传到了 github:https://github.com/QuarkGluonPlasma/eslint-plugin-exercize 那么再回到最开始的问题,为什么 Eslint 可以检查代码格式...,而 Babel 不可以呢?...为什么 Eslint 可以检查格式 Babel 不可以 我们写了一个检查大括号格式的 rule,可以发现能够做格式检查关键是能找到关联的 token。...而 Babel 其实也支持 range 和 token,但是却没有提供根据 range 查询 token 的 api,这是它不能做格式检查的原因。
这篇文章的时候,漏了一个知识点,直到晚上吃饭的时候才突然想到,关于ConcurrentHashMap在存储Key与Value的时候,是否可以存null的问题,按理说这是一个小问题,但build哥却不敢忽视...接下来我们就将HashMap、Hashtable、ConcurrentHashMap这三集合类的键值是否可以null的问题,放一起对比去学习一下。...null的value值,我们知道HashMap的键值对特点如同身份证与人名一样,key等同于身份证,全国唯一,而value值等同于人名,可以重复,比如全国有上万个叫张伟的,所以value值也就同样允许存储多个...大致的意思是,在单线程环境中,不会存在一个线程操作该 HashMap 时,其他的线程将该 HashMap 修改的情况,可以通过 contains(key)来做判断是否存在这个键值对,从而做相应的处理;...而在多线程环境下,可能会存在多个线程同时修改键值对的情况,这时是无法通过contains(key)来判断键值对是否存在的,这会带来一个二义性的问题,Doug Lea说二义性是多线程中不能容忍的!
所以根据我的估计,对于实验室以及一些理想路况的情况,目前的顶尖技术是可以达到L3甚至是L4,但对于放之四海而皆准的普通路况来说,保守估计应该只能实现L2。...图像识别有一个很大的问题是它的准确率相对并不高,即使在训练的过程当中可以达到99%以上的准确度,但是谁也不能保证它训练的样本当中已经覆盖了所有的情况。...你可能还会奇怪,在上面的例子当中难道雷达就没有工作吗?当然是有工作的,但是凡是系统都会存在误差,尤其是当图像识别的结果和雷达结果有矛盾的时候,系统究竟应该相信哪一个的呢?...数据量虽然爆炸,但是车辆对数据分析的要求却不能降低,尤其是车身是在运动的,速度很快的话,0.1秒的延迟就可以酿成惨剧。所以计算的延迟必须非常低。...比如车辆要从A点去B点,我们通过各种地图可以知道路线,但是却不能知道路况。不知道这条路有多宽,是高架还是普通路,不知道几车道。不知道这些信息还如何行使呢?
新建项目 vue默认为body设置了margin:8px 我们可以在App.vue 中,设置width和height为100%,对margin进行重写去掉边距 html,body{
通过nslookup 解析出杭电官网的ip地址,然后在浏览器中手动输入相关ip地址,结果并不能得到访问结果,为什么?...1.为什么我直接访问www.hdu.edu.cn是能够访问到网站的,而当我输入218.75.123.182却访问不到?...这么多站点对应同一个ip地址,你只输入ip地址,浏览器当然不知道你到底要访问哪一个站点,这就是为什么你不能够使用ip地址去访问的原因所在。...05多个站点对应一个ip地址的问题 理论上来说,一个ip对应一个站点,这是很正常的,那为什么会出现上文中所描述的那样,一个ip地址对应多个站点的情况呢?...这里对于这一部分内容不做深究 由此,我们基本可以推断出,杭电实际的网络结构是下图所示的样子。而不是上文中,我所推测的虚拟主机。 ?
注意:verilog中不能调用vhdl的parameter package,即vhdl中定义的parameter 不能被顶层verilog调用 今天在编译一个Verilog文件,其中嵌入了VHDL的模块...vhd: boolean type does not match integer literal 经查阅后得知,Quartus II在翻译VHDL中的boolean类型是用false和true传递的,而Synplify...std_logic ); end compoent begin verilogmodelGE: m //我自己实验的不用也可以
为什么而工作 "你为什么而工作?“ "这不废话吗?我不工作你养我啊?工作就是为了赚钱养家,要不是出于经济压力,我才懒得工作”? 谈起工作的价值这个话题,很多人都会觉得很无聊。...工作,无非就是用自己的时间换钱,是一种生活无奈的选择。那些为了生活意义而选择工作的都是段子手编造出来的。现实中,工作是无聊的,枯燥的,令人难以忍受的。所以“窃·格瓦拉”才会选择偷电动车。 ?...因为工作内容固然是属于公司的,但工作能力是属于自己的,职业生涯是属于自己的。 你,是在为自己而工作。 ? 为什么工作 把自己当成一个企业 必须将自己当成一个企业,而将公司当成你的客户。...甚至可以说,连基本的电脑办公常识都不懂。怎么可能做80页ppt都不保存?即使软件没有设置自动保存,任何一个有经验的白领,都会手动保存的习惯。...程序员的日常工作,有很多内容其实是类似的,甚至是重复的。稍微用心的人,肯定能找到高效操作的方法。甚至可以将很多工作都写成自动化脚本,能让程序完成的事就不要浪费自己的时间。
探寻源码 ConcurrentHashMap的put方法对key和value做了非空判断,如果为空,会抛出空指针异常: 那为什么ConcurrentHashMap如此设计呢?...在单线程环境中,不会存在一个线程操作该 HashMap 时,其他的线程将该 HashMap 修改的情况,可以通过 contains(key)来做判断是否存在这个键值对,从而做相应的处理。...而在多线程环境下,可能会存在多个线程同时修改键值对的情况,这时是无法通过contains(key)来判断键值对是否存在的,这会带来一个二义性的问题,Doug Lea说二义性是多线程中不能容忍的!...这种不确定性会造成线程安全性问题,而ConcurrentHashMap本身又是一个线程安全的集合。 所以才这么设计。
,for of可以迭代大部分对象甚至字符串,却不能遍历普通对象。...anotherNewArr } for (const value of array) { console.log(value); // 'foo', 'bar', 'baz' } 普通对象为何不能被...可以看到,这些可被for of迭代的对象,都实现了一个Symbol(Symbol.iterator)方法,而普通对象没有这个方法。...也就是说,只要某个数据结构部署了 Iterator 接口,就可以对它使用扩展运算符,将其转为数组(毫不意外的,代码[...{}]会报错,而[...'123']会输出数组['1','2','3'])。...而普通对象解构赋值的内部机制,是先找到同名属性,然后再赋给对应的变量。)
1.准备阶段在准备阶段我们就需要把下面的代码都写上,至于为什么在后续的代码会讲解。...这是为了后续的进程程序替换而准备的。需要作为参数传给exec函数。...export:将 shell 变量导出为环境变量。pwd:显示当前工作目录。history:显示命令历史记录。read:从标准输入读取输入。kill:向进程发送信号(如终止信号)。...该函数可以帮助程序在更改目录后获取当前的路径,或者在程序中随时查看当前的工作目录。2.3.3 putenv()putenv 是 C 语言中的标准库函数,用于设置或修改环境变量。...通过 putenv,你可以在程序运行时动态地添加或修改环境变量。2.4 执行非自建命令就是普通的进程程序替换。
那为什么到sqrt(x)就够了呢?
java虚拟机的这关 java最强特性 跨平台的支持 大部分java开发人员,都会在项目中用过java平台相关的高精尖的技术,但是对于底层支持的JVM却了解甚少 如何看待上层框架和底层支持 有一定工作经验的人开发人员...,会觉得SSM和微服务才是java技术的核心和重点,基础的技术凑活就好,非也,小冷也见过一些只知道追逐新兴技术但是确练string类中有一个可以反转字符串的方法都不知道,这是一种“病态”的发展趋势 很多的大牛...为什么我们要学习jvm 面试需要 尤其是大厂 对于jvm的重视程度还是比较高的 中高级程序员必备技能 项目管理,调优的需要 追求极客的精神 垃圾回收算法,JIT,底层原理 java可能不是最好的语言但是...其实没有最好的编程语言,只有最适合的使用场景 JVM : write once, run anywhere 在任意一个地方编写,在任意平台上运行 java虚拟机通过java编译出的字节码文件,来实现全平台的运行 为什么我们要说...JVM是最强的虚拟机呢,应为它不只是可以多平台运行java,也有很多的语言可以在jvm上实现跨平台,只要他们遵循JVM的规则生成对应的字节码文件 java虚拟机和他的强大特性如下几点 Java 7
切片是引用类型, 所以在函数中可以修改底层数据。 结合第一条, 函数内的切片 和 函数外的切片不是同一个。 sl[0:5] 操作的是 **底层** 数据, 并返回了新一个切片。...// 但数组是引用类型, 所以可以修改底层数组 fmt.Println("s ptr(old):", s) // [] s = append(s, 10, 20, 30) fmt.Println
可以拆分成三部分: 第一部分是用户,随后在@之后是主机名字符串,第三部分是 当前所处工作目录。 ...带 ‘v’ 的接口也有三个,execvp 接口是最好的选择,为什么大家可以自己思考一下,很简单: execvp(argv[0], argv);//根据命令在环境变量里查找,在根据选项做出对应的动作 ...所以向cd 这种命令,我们就不能交给子进程操作,而这样的命令我们称为 内建命令。 为了解决内建命令,我们可以 把cd 命令来单独处理,用一个接口封装。...(pwd);//此时数组内容为PWD=...此时putenv就可以更改环境变量了 } return ret; } 刚才的问题解决了…吗??...获取当前工作目录的绝对路径。
大厂不约而同选择VR一体机 如果细究VR一体机的历史,我们就会知道,这个名字其实可以说是国内硬件厂商“发明”的。因为在那个时候,Oculus还在钻研他们的PC VR。 ?...同时,比较“另类”的是,在前面板的中间有一颗广角摄像头,和摄像头对应的另一面是一个距离传感器,两者协调工作用于位置追踪定位。 ?...其中,第一段是可以灵活调转方向的顶部托,后两段是自适应角度后脑托。由于采用的是具有弹性的不锈钢金属带,所以佩戴的时候可以快速贴合头部,而软质海绵垫板的设计,让佩戴毫无压迫感。 ?...而VR一体机最大程度的做到了取长补短,作为一种日常娱乐工具,可以说绰绰有余了。 不过受限于内容和游戏应用的稀缺,如果消费者投入几大千只是用来观看视频的话,性价比就显然过低了。...不过,我们依然不能忽视摆在VR硬件发展前面的一些“拦路虎”:如何平衡VR体验和价格的矛盾?如何说服消费者购买你的VR硬件,并且心甘情愿为VR内容体验付费? 这些问题,需要全体从业者认真对待。
,却可以正常删表: import pymysql conn=pymysql.connect( host = '127.0.0.1', user = 'yewen', passwd='YeWen.3306...sql = "drop table tmp1" cur.execute(sql) cur.close() conn.close() 回答 其实问题并不复杂,有几个原因: 要写入的表是InnoDB引擎,而InnoDB...而删除表是DDL操作,目前DDL操作还不支持事务,所以即便没有开启自动提交,也能成功。 知道上面的原因就好办了。...简言之,有几点建议: 当有大批量数据更新时,可以先关闭autocommit,等事务结束后,再手动提交。事务commit时要刷新redo log、binlog等,代价还是比较大的。...不少开发框架都会默认设置 set autocommit=0,更有甚者,每次执行一个SQL前,都要发送一次set请求,增加了无谓的开销,如果有这种情况,可以自行调整开发框架的代码。
(完美符合上面的情景) HOME: 这个环境变量指定了当前用户的主工作目录,也就是用户登录系统后所处的默认目录。...把文件的路径添加到PATH中 PATH=自己代码路径:$PATH 如果不加:PATH,那么PATH会直接被覆盖,只有自己代码的路径 2.4环境变量相关的命令 echo: 显示某个环境变量值 export...: 设置一个新的环境变量 export [变量名]=[赋值] 可以设置一个名为“变量名”的环境变量,并赋予其值为“赋值” env: 显示所有环境变量 unset: 清除环境变量 set: 显示本地定义的...shell变量和环境变量 本地变量 直接使用 变量名=赋值 我们这样就能创建一个本地变量,本地变量不能继承。...注意,putenv 函数会修改其参数指向的字符串。因此,如果你不希望原始字符串被修改,你应该传递一个字符串的副本给 putenv。
领取专属 10元无门槛券
手把手带您无忧上云