粉丝7.8万获赞28.6万

每天一个技术点。昨天讲解了是菌的不可变性以及不可变的好处,今天我们就来讲讲是菌不可变的一个弊端。我们已经知道,当我们操作是菌时, 不会改变原对象,只会创建新的试卷对象。那当我们需要对支付串进行大量操作时,就必然会产生许多新对象,从而导致性能低下。为了解决这一问题, 加瓦推出了使俊 builder 这个可变的支付串类型,我们简称他为 sb。 sb 继承了一个老 sb。 apps checked 使用 builder, 其底层和试卷一样,都是用的欠儿数组来表示支付串。不过老 sb 的欠儿数组没有加 private finer 修饰服 代表这个七二数足可被访问且可变。而且 sb 四质量还提供了许多方法供我们修改支付串。比如 appan 的方法就可以 用来在原制服串后面添加制服。注意哦,这些方法修改的都是自身数据返回的 sb 对象,也都是他自己本身以方便的链式调用,不像是距离一样返回的都是新对象。这样一来, 我们频繁修改支付串就方便了很多。事实上,当你用试卷进行支付串拼接时,其底层会创建 sb 对象,并调用 sb 的 append 方法完成操作。所以,当需要频繁操作支付串时,得谨慎使用试卷,优先选择 sb。 sb 的优点说完了,再说他的缺点。他是一个可变对象,那他自然就县城不安全。为了解决这个县城安全问题,加瓦还推出了一个小 sb, 即是军八分。小 sb 和 sb 一样,都继承了老 sb, 所以他也能修改这幅串。他和 sb 的不同在于,小 sb 内部 使用了 singlenights 的关键字,修饰了支付串操作方法,从而保证了现在安全。有得必有舍。正是由于他每次操作支付串时都会加锁,所以性能会比较低下。说到这里, 石俊、石俊 builder 和石俊巴粉这三者的区别和使用场景也就清楚了。石俊不可变,操作少量数据或不需要操作数据时,就适合使用它。 sb 可变,但县城不安全。 在需要频繁操作数据且不用考虑县城安全的情况下,就适合用它。小 sb 可变,县城安全,但性能比较差。在需要频繁操作数据且需要考虑县城安全的情况下,就适合用它。跟着螃蟹哥技术不翻车。

那我们再来看另外的面试题,四军,四军八分,四军 beaud, 他们的区别是什么? 好,我们来看,首先对于思俊啊,我们比如说我们通过这种方式去定义一个自我串好, 那么对于思君而言,其实你是没有办法去修改他的,但是我们的思君 buff 对象以及我们的思君 b 的对象,其实你是可以去修改这个对象的,呃,骗的其实就是主体就是他们自己,对吧?那么对于思君,比如说我们这种去修改 abcd, 其实你并其实你这种代码,你并没有真正去修改 abc 这个制服上产量,而是创建了一个新的 abcd 制服上产量。所以说啊,在我的笔记里面也跟大家说了,我们思俊是不可变的,如果尝试去修改,会生成一个 新的制服穿对象,而世军八分以及世军 beaut 他是可以变的。好,那么这是第一个,那么啊,就是思君啊,那么呃,像我们的思君 beaut 来,比如说我们来看一下思君 beaut 的他的一个特点是什么? 好哎,我们把 s 传进去,然后构造出来一个 beaut, 然后我们就可以去调用这个 beaut 的漂亮方法。好,那么啊,我们的思君 beaut 其实他是可变的,这是他思俊的一个区别,那么思君 beaut 和我们的 呃那个思君八分,他的区别是什么呢?大家可以看在我们的呃,思君 beaut 的配的方法,以及他的这种方法的底层实现,他其实都是没有加锁的,看见没有。而同样的,我们对照着去看,比如说我们直接来六一个思君八分哎, s 传去,然后得到一个八分 对象,然后我们去调用八法的判断方法,那么哎,一样的,我们看一下他的判断方法怎么实现的。哎,很明显,在十君八法的判断方法他的前面他就加了一个深块的,所以说他是并发安全的,所以说我们的八 八分,十分八分,他是现场安全的。哎,有事情 beaut 他是现场不安全的,那么这是他们的一个区别,同样的,从这一点我们就可以推倒出来啊, 我们在当现成环境下面,其实你就可以用思维思君 beaut 了,因为他们其实类似啊,他们两个是类似的,但是呢,当然现成环境下面思君 beaut 的效率会更高啊。 如果说你是多线的环境下面,你要去修改一个自我算的话,那么你就要考虑现场安全的问题,那么你就可以用四军八分,明白,好,所以说这是他们三个的一个区别。

siri 与 siri 标的区别?看完颠覆你的认知,不信请别划走。看下面两种写法有什么区别,第一种定义 siri 类型, 第二种定义瓷砖标的类型。两种写法都是做支付串连接。我先上下结论,两种写法在运行时没有任何区别,因为加法六以后,编辑始终把支付串的加连接编成随军标的。下面我来证明一下,第一步用加瓦 c 编译加号文件,得到 class 文件。 第二步用加瓦 p 命令反编,以 class 文件反编后,我们可以看到 gvm 指定第一种写法定的 s j 类型 编译优化成使劲 beauty, 然后调用耳喷的方法和第二种写法编译后的指定完全一致。下次面试遇到这个问题,知道该怎么回答了吧。

思君,思君, beautia 思,思君巴粉,这三个啊对象,他的区别以及呢使用场景。那么很多同学呢,对这三个类啊,他的这个使用呢,可能相当熟悉, 对吧?如果我是需要去改变这个字幕串的话,可能就点 oppo 的,就是去使用十菌八法或者是十句 beaut, 对吧?那么为什么要这样来用啊?他的原因是什么?以及呢他各自到底是什么样的场景?下面使用十句八法,什么样场景使用十句 beaut, 对吧?那么这个是为什么?我们来看一下啊。 好,首先呢是思俊,思俊呢是翻转修饰的啊,我们可以去了看一下这个元代码,思俊呢,他是由翻转修饰的,他是不可变的啊,不可变意味着呢,你每次去操作这个思俊,也就说,比如说你去啊,对这个思俊,比如说我去加一个支付券,比如说 啊,迪克斯郡队 abc, 我还要加一个 d, 那么这个时候呢,他会生成一个新的对象啊,比如说每次操作都会生成一个 新的思君对象,这就会导致什么呢?导致我们这个内存呢,就是会啊,浪费的比较多啊,就是他会不断的创建对象,不断的创建对象啊,然后呢这个思君八法和思君 beautiful 呢,他不一样,他呢都是在原对象上去进行操作,也就说他不会生成新的对象啊,他一直是这个,就这一个对象啊,他不会再生成新的对象。 所以说呢,我们如果是这个对这个制服串操作啊,比较频繁的时候啊,就是说如果你经常需要改变这个制服串内容的时候,那么我们呢,通常是使用这个试卷八粉跟 这个思君 beauti 啊好,那么思君八分跟思君 beaut 他又有什么区别呢?首先思君八分啊,他是现场安全的,然后思君 beauti 呢是现场不安全的,那么这个时候呢,可能这么说了,可能,可能人家都知道对不对?那么到底是什么意思呢?什么情况下是为,为什么这个思君八分是安全的?思君 beautiful 是不安全, 然后一对于一个对象来说,这个这个一个一个类啊,或者说一个对象他的这个现场安全跟现场不安全到底是什么意思呢?实际上就是说我们在使用这个, 比如说我们使用一个时间标短,或者是使用一个时间八分的时候,也就是说你呀需不需要额外的去加锁,加我们这个伸缩 nice 的啊? 比如说你修复效,额外的去枷锁,保证这个值了,他不会变,也就是在多现成环境啊,多,首先是多现成环境啊,然后呢?第二个是共享变量,比如说这个值了,这个这个呃变量啊,这个是十斤六的,或者是十斤八宝的是共享变量。然后呢啊,就是 在使用的时候你要你想保证他的使用啊,就是是正常的,就就是我们的这个结果不会被更改啊,就是结果是预期结果,就是不会出现并发问题啊,那么这种这三个啊,其实就是我们所讲的这 对象的这个县城安全以及这个县城不安全的这个呃,这个场景啊,就是说必须要满足这三个条件,一个是多县城,一个是共享变量,然后是结果不是 影响,对吧?那么这个就是所谓的这个对象到底是不是现场安全的啊?好,那么思君标粉是,呃,这个思君八粉,为什么说他是现场安全的原因就是这个思君八粉里面的每一个方法他都他都加了一个生锈烂子的修饰,也就所以呢,我们 不需要额外的再去加这个升级 nice 的,这就是这个原因啊,那么啊,他们的使用场景啊,就是说什么情况下用四军八分,什么情况下用四军 beaut 了,那么这个时候可能可能同学就会说啊,如果我不考虑现场安全,那么我就用四军 beaut 啊,考虑现场安全就使用四军,那这个,呃,八分,对吧?因为 是去 beautiful 了,因为他没加深 q 耐子的,那么他的性能肯定会好一点,对吧?比这个思君八倍的性能呢,会好一点。而这个思君呢,因为他要创建 大量的对象,所以他的性能是最差的。大家呢,绝对不可以这么去回答啊,不可以说啊,考虑现场安全就采用四军八分,或者说了,或者说我考虑性能,我就采用四军六的啊,没有程序说是不考虑现场安全,或者是不考虑性能的啊, 我们写代码一定要考虑这个现场安全跟现成啊,跟这个性能问题,绝对说不可以说,你不考虑什么的时候使用什么什么啊,不可以这么样去答,那么怎么样来说呢?而是说应该说呢,我们在所有的场景里面啊,应该优先去使用磁悬浮的,优先使用磁悬浮的,而当我们的这个变量 是作为一个共享变量,而且呢是在多现成环境下面,对吧?我们要保证这个结果正确,那么在这么一种场景下面,我们呢使用思君 beaut, 使用思君 buff, 用它来保证这个线安全,那么如果不是这种场景,那么 ok, 那么效率优先采用了思君 beautiful, 好,那么 其他的啊,就是如果你不是对这个智慧钻经常进行改动的,那么呢就直接使用时间就可以了啊,好, 那么这就是啊思俊,思俊 buff 跟思俊 beaut 啊这三个类他的一个区别,以及呢使用场景。

扎弯一分钟,打印目录结构,首先创建一个 file 对象, 然后将要打印的目录路径写出来,这里我直接获取地盘下所有内容,然后打印一个分割线, 然后获取 d 盘下所有目录和文件,放到一个数组中, 然后便利数组 将目录和文件名称打印出来。打印之前我们也可以做一个判断,假如是文件的话,就输出这个文件的大小,假如是目录的话,就打印一行文, 文字 运行看看效果,可以看到已经便利出来了。是目录的话会有文件加三个字, 是文件的话会显示这个文件的大小,你也可以自己试着写下哦,记得关注再走哦!

哈喽,大家好,我是麦克,一个工作了十四年的加瓦程序员和创业者。今天我们分享一个非常基础但是有点深度的面试题。 记得啊,十多年前我去找工作的时候经常会碰到这样一个问题,现在这一类问题啊,考察的是应届生,会比较多一点,这个问题是史俊斯俊巴粉和思俊 beauty 的一个区别。另外,我想告诉大家,我花了一个多星期的时间,把之前的高手的回答整理成了十万字的文档, 如果你想获取的话,可以在我的主页去加微领取啊。下面我们来看看普通人和高手对于这样一个问题的回答。普通人的回答,嗯,是俊,是俊八粉和是俊 builder, 呃,因为 suring 它是一个不可变的类,因为它是,它是翻领修饰的,然后 sun 八和思君 bue 的是可变类。嗯, 对,就就这样。嗯,高手的回答,嗯,好的。临时关,关于 shreen streen buffer 和 shreen beautiful 的区别,我想从四个方面来说,第一个是可变性,思君内部的外流值啊,是法律里修饰的,所以它是一个不可变的类,所以每一次修改是俊的值的时候,都会产生一个新的对象。 而石俊把粉和石俊丢的是一个可变类,这幅串的变更不会产生新的对象。第二个是现成的安全性,因为石俊是一个不可变的类,所以他是现成安全的。 而思君八方也是现成安全的,因为他的每个操作方法里面都用了一个新款 nice 的一个同步关键字。最后一个思君 bud, 他不是现成安全的,所以在多性的环境下呢,对自负算进行操作的时候,我们应该使用四君八方, 否则使用 stream builder。 第三个,性能方面,试菌是性能最低的,因为不可变意味着做支付创拼接或者修改 时候啊,我们需要重新去创建新的对象以及分配内存。其次呢,是史俊,巴粉要比史俊的性能更高一点,因为他的可变性意味着自幅算可以直接被修改。 最后啊,性能最高的是思君 bude, 他比思君巴菲的性能要更高,因为思君巴菲加了同步锁,加了锁呢,就意味着对性能会产生影响。 第四个是存储方便,思骏存储在支付商产量池里面,而思君八分和思君 bude 它是存储在堆内存空间。以上就是我对这个问题的理解。最后再补充一个点啊,思君 buiter 和思君八分都是派升至 ftx street builder 这样一个抽象类。好的, 这个问题其实还是挺有意思的,可能平时我们在使用致富传做一些操作的时候,并不会去关心性能和现在安全性的一些影响,但是啊,确实在家务里面提供了不同的致富传操作,使得我们可以在不同的场景里面去使用不同的致富传对象,那么这些小细节 在开发中或多或少还是有一些影响的。好的,本期的普通人 vs 高手的面试系列的视频啊就到这结束了,喜欢我作品的小伙伴记得点赞收藏加关注,我是麦克,我们下一期再见!

那我们再来看另外的面试题,思君,思君八分,思君 beauty, 他们的区别是什么? 好,我们来看,首先对于死菌啊,我们比如说我们通过这种方式去定义一个字符串, 好,那么对于思君而言,其实你是没有办法去修改他的,但是我们的思君八粉对象以及我们的思君 b 的对象,其实你是可以去修改 这个对象的,呃,要判的其实就是主体就是他们自己,对吧?那么对于石军,比如说我们这种去修改 abcd, 其实你并其实你这种代码,你并没有真正去修改 abc 这个制服上产量,而是创建了一个新的 abcd 制服上产量。所以说啊,在我的笔记里面也跟他有 说了,我们思君是不可变的,如果尝试去修改,会生成一个新的致富创对象,而思君八分以及思君 beauty, 他是可以变的好,那么就是第一个,那么啊,这思君啊,那么呃,像我们的思君 beauty 来,比如说我们来看一下思君 beauty 它的一个特点是什么? 好哎,我们把 s 传进去,然后构造出来一个 bu 的,然后我们就可以去调用这个 bu 的的漂亮方法。好, 那么啊,我们的思君 beauty 其实他是可变的,这是他和思骏的一个区别,那么思君 beauty 和我们的 呃那个思君八粉,他的区别是什么呢?大家可以看在我们的呃思君 beauty 的 a 配的方法,以及他的这种方法的底层实现,他其实都是没有加锁的,发现没有。而同样的,我们对照者去看,比如说我们直接来 又一个思君八分,哎, s 传去,然后得到一个八分对象,然后我们去调用八分的耳片的方法,那么哎,一样的,我们看一下他的耳耳片的方法怎么实现了,哎,很明显在时君八分的耳片的方法,在这前面他就加了一个深口来的,所以说他是并发安全的,所以说我们的 八分思君八分他是现成安全的, a 是君 bu 的,他是现成不安全的,那么这是他们的一个区别。同样的从这一点我们就可以推倒出来啊, 我们在当安县城环境下面,其实你就可以用四军四军标的了,因为他们其实类似啊,他们两个是类似的,但是呢,当安县城环境下面四军标的效率会更高。 如果说你是多性的环境下面你要去修改一个致富算的话,那么你就要考虑现场安全的问题,那么你就可以用四菌八粉,明白,好,指的这是他们三个的一个区别。

石俊是只读字母串,他并不是基本属于类型,而是一个对象。从底层圆码来看啊是一个 final 类型的制服数据,所以用的字母串不能被改变,一经定义无法再增三改。每次对石俊操作都会生成新的石俊对象,石俊巴粉和石俊 builder 都记忆成了 obstruct。 石俊 中那么 drop the strange 的抽象类中你们可以看到啊,他们的底层都是可变的字母数组,所以在进行频繁的字母串操作时,建议使用四军八分和 丢的完成操作。另外使俊八分对方法加了徒步锁,或者是对调动的方法加了徒步锁,所以是现场安全。使俊丢的并没有对方法进行加徒步锁,所以是非现场安全。

国内的扎马面试为什么总是问 s 顺八和 s 顺丢丢的区别是什么?档次为什么这么低呢?这个是前段时间我在知乎上看到的一个非常火的问题, 之所以会有这样的问题,可能是因为提问者觉得这个问题太简单了,应该是每个扎尔开发都会的。但其实呢,这种问题一般只会在面试一开场的时候问,因为一开始的时候面试刚开始总不能上来就问这个 m 是如何保证内存分类过程中的现状安全的是吧, 总需要有一个简单点的问题来拆个开个场先来热个身嘛。那其实呢,一般问完这道题之后呢,接下来可能就是一份狂轰乱炸了,因为这道题最简单的就是他会和县城安全有关嘛。那接下来就会问怎么去保证县城安全啊?然后就会问到锁什么是锁呀,什么是死锁呀? 然后又会问到塞克奈斯的他的原理是什么呀?然后他是怎么用的呀?然后他的锁油化包括锁粗化所消除自选啊,偏向啊,轻量及重量级这些都是怎么回事啊?然后又会问塞克奈斯和奥雷泰奥区别是吗?为什么要有奥雷泰奥?然后又会上 上升到呃扎瓦内存模型对吧?然后问完了扎瓦内存模型呢,就可能就会问你一些关于扎瓦并发包有没有什么了解,那并发包里面就会问上 fuel fast 和 fusif 是怎么回事啊?然后 那这个呢?可能会问那什么是 come oncoveyourt 呢?然后接下来就是什么是 aqs 啊,什么是 cs 啊,对吧?然后呢, cs 都知道的话,那乐观所一定知道了,那到底什么是乐观所呢?然后可能就过渡到那乐观所知道了,悲观所呢?乐观所和悲观所是怎么实现的?他们的区别是什么呀?那 可能就过渡到数据库的锁,对吧?然后数据库锁呢,就会问到什么是行级锁呀?表级锁呀,共享锁,开打锁,概括锁啊,什么啊 nix key lock 啊这些锁可能就会问到 问了这些之后呢,可能接下来如果面试者对数据库比较了解的话,可能就会问一些数据库的隔离级别啊,和锁引啊,然后相关的一些问题,比如说什么是拒速锁引,什么是非拒速锁引?那什么是最左前缀啊?然后锁引是怎么实现的啊?然后问到锁引是怎么实现呢?可能又问到一些,比如说哈, 所以啊和比如说毕加数啊,他是怎么实现的,对吧?然后问到了毕加数呢,可能就会继续区分一些什么毕加数里面的存储是怎么存的呀?然后为什么要用毕加数,对吧?然后问到了,所以可能还问到一些什么回表啊之类的一些问题, 然后呢所问数据库,所问了差不多了之后呢?如果回答差不多,并且面试着有一定的分布式相关的经验的话,可能接下来就会问一些和分布式所相关的东西,就是 喷雾水是怎么实现的?呃,比如说有数据库啊,有 radis 啊,还有啊组 q 啊,对吧?然后就会分别问到那呃这三种所实现分封式所的区别是什么?各自有什么优缺点呢?那为什么要使用 radis 呢? 问到 reds 就问到分布式缓存了吗?那就问道 redds met 开始之间有什么区别啊?那关于做 k 波那个方向就是 jk, 他是怎么实现分布式所的啊?到底什么是 jk 呢?讨论到 jk 呢?可能就讨论他的那个分布式里面的 cap 这样的一个理论嘛。那到底什么是 cap? 为什么 cap 不能同时存在?然后呢?就可能 cap 理论讨论之后, 那必然要谈的一个就是贝斯理论吧,那为什么又会有这样的贝斯理论?然后,呃,分布式系统是怎么保证什么书籍一致性啊?还有接下来就会问到什么分布式事物啊,就是各种各样的问题就会 扩展的很多,到了分公司呢,就可能就逐渐逐渐的,如果回答的很好的话,可能就会问一些分不知一性的一致性的算法,那如果算法相关的都回答的很好的话,那最后大招出来了,能不能给我解释一下什么是开个骚的算法,对吧?这就面试这个过程呢?他必然是一个, 呃,首先要抛出来一个问题,然后要去和和面试官和候选人之间,根据双方的一个一个讨论,去主段子,逐渐的去深入,逐渐的去展开的, 而不是说面试官应该要准备好一些题,然后不管面试者回答的怎么样,就是一二三四五,全都吐给他,而不应该是这样的,应该是有一个交互的过程,根据面试者相关的背景以及他对上一道题的回答,然后呢?呃,就是根据回答的内容的知识点,然后再去展开,再去发散,这样的过程才是一个好的面试的过程, 所以也就回答了我们前面的那个问题,为什么国内的面试都喜欢用一个很简单的面试题来去展开啊?今天反正就是通过一个简单的小问题吧,然后展开了一下。那后面如果大家对一些面试相关的内容感兴趣的话,后面可以再再展开,再多介绍一点。


