导航:首页 > 源码编译 > 大厂源码面试题

大厂源码面试题

发布时间:2023-01-15 07:53:35

1. 大厂面试题详解:如何用Redis实现分布式锁

说一道常见面试题:

一个很简单的答案就是去使用 Redission 客户端。Redission 中的锁方案就是 Redis 分布式锁得比较完美的详细方案。

那么,Redission 中的锁方案为什么会比较完美呢?

正好,我用 Redis 做分布式锁经验十分丰富,在实际工作中,也 探索 过许多种使用 Redis 做分布式锁的方案,经过了无数血泪教训。

所以,在谈及 Redission 锁为什么比较完美之前,先给大家看看我曾经使用 Redis 做分布式锁是遇到过的问题。

我曾经用 Redis 做分布式锁是想去解决一个用户抢优惠券的问题。这个业务需求是这样的:当用户领完一张优惠券后,优惠券的数量必须相应减一,如果优惠券抢光了,就不允许用户再抢了。

在实现时,先从数据库中先读出优惠券的数量进行判断,当优惠券大于 0,就进行允许领取优惠券,然后,再将优惠券数量减一后,写回数据库。

当时由于请求数量比较多,所以,我们使用了三台服务器去做分流。

这个时候会出现一个问题:

如果其中一台服务器上的 A 应用获取到了优惠券的数量之后,由于处理相关业务逻辑,未及时更新数据库的优惠券数量;在 A 应用处理业务逻辑的时候,另一台服务器上的 B 应用更新了优惠券数量。那么,等 A 应用去更新数据库中优惠券数量时,就会把 B 应用更新的优惠券数量覆盖掉。

看到这里,可能有人比较奇怪,为什么这里不直接使用 SQL:

原因是这样做,在没有分布式锁的协调下,优惠券数量可能直接会出现负数。因为当前优惠券数量为 1 的时候,如果两个用户通过两台服务器同时发起抢优惠券的请求,都满足优惠券大于 0 每个条件,然后都执行这条 SQL 说了句,结果优惠券数量直接变成 -1 了。

还有人说可以用乐观锁,比如使用如下 SQL:

这种方式就在一定几率下,很可能出现数据一直更新不上,导致长时间重试的情况。

所以,经过综合考虑,我们就采用了 Redis 分布式锁,通过互斥的方式,以防止多个客户端同时更新优惠券数量的方案。

当时,我们首先想到的就是使用 Redis 的 setnx 命令,setnx 命令其实就是 set if not exists 的简写。

当 key 设置值成功后,则返回 1,否则就返回 0。所以,这里 setnx 设置成功可以表示成获取到锁,如果失败,则说明已经有锁,可以被视作获取锁失败。

如果想要释放锁,执行任务 del 指令,把 key 删除即可。

利用这个特性,我们就可以让系统在执行优惠券逻辑之前,先去 Redis 中执行 setnx 指令。再根据指令执行结果,去判断是否获取到锁。如果获取到了,就继续执行业务,执行完再使用 del 指令去释放锁。如果没有获取到,就等待一定时间,重新再去获取锁。

乍一看,这一切没什么问题,使用 setnx 指令确实起到了想要的互斥效果。

但是,这是建立在所有运行环境都是正常的情况下的。一旦运行环境出现了异常,问题就出现了。

想一下,持有锁的应用突然崩溃了,或者所在的服务器宕机了,会出现什么情况?

这会造成死锁——持有锁的应用无法释放锁,其他应用根本也没有机会再去获取锁了。这会造成巨大的线上事故,我们要改进方案,解决这个问题。

怎么解决呢?咱们可以看到,造成死锁的根源是,一旦持有锁的应用出现问题,就不会去释放锁。从这个方向思考,可以在 Redis 上给 key 一个过期时间。

这样的话,即使出现问题,key 也会在一段时间后释放,是不是就解决了这个问题呢?实际上,大家也确实是这么做的。

不过,由于 setnx 这个指令本身无法设置超时时间,所以一般会采用两种办法来做这件事:

1、采用 lua 脚本,在使用 setnx 指令之后,再使用 expire 命令去给 key 设置过期时间。

2、直接使用 set(key,value,NX,EX,timeout) 指令,同时设置锁和超时时间。

以上两种方法,使用哪种方式都可以。

释放锁的脚本两种方式都一样,直接调用 Redis 的 del 指令即可。

到目前为止,我们的锁既起到了互斥效果,又不会因为某些持有锁的系统出现问题,导致死锁了。这样就完美了吗?

假设有这样一种情况,如果一个持有锁的应用,其持有的时间超过了我们设定的超时时间会怎样呢?会出现两种情况:

出现第一种情况比较正常。因为你毕竟执行任务超时了,key 被正常清除也是符合逻辑的。

但是最可怕的是第二种情况,发现设置的 key 还存在。这说明什么?说明当前存在的 key,是另外的应用设置的。

这时候如果持有锁超时的应用调用 del 指令去删除锁时,就会把别人设置的锁误删除,这会直接导致系统业务出现问题。

所以,为了解决这个问题,我们需要继续对 Redis 脚本进行改动……毁灭吧,累了……

首先,我们要让应用在获取锁的时候,去设置一个只有应用自己知道的独一无二的值。

通过这个唯一值,系统在释放锁的时候,就能识别出这锁是不是自己设置的。如果是自己设置的,就释放锁,也就是删除 key;如果不是,则什么都不做。

脚本如下:

或者

这里,ARGV[1] 是一个可传入的参数变量,可以传入唯一值。比如一个只有自己知道的 UUID 的值,或者通过雪球算法,生成只有自己持有的唯一 ID。

释放锁的脚本改成这样:

可以看到,从业务角度,无论如何,我们的分布式锁已经可以满足真正的业务需求了。能互斥,不死锁,不会误删除别人的锁,只有自己上的锁,自己可以释放。

一切都是那么美好!!!

可惜,还有个隐患,我们并未排除。这个隐患就是 Redis 自身。

要知道,lua 脚本都是用在 Redis 的单例上的。一旦 Redis 本身出现了问题,我们的分布式锁就没法用了,分布式锁没法用,对业务的正常运行会造成重大影响,这是我们无法接受的。

所以,我们需要把 Redis 搞成高可用的。一般来讲,解决 Redis 高可用的问题,都是使用主从集群。

但是搞主从集群,又会引入新的问题。主要问题在于,Redis 的主从数据同步有延迟。这种延迟会产生一个边界条件:当主机上的 Redis 已经被人建好了锁,但是锁数据还未同步到从机时,主机宕了。随后,从机提升为主机,此时从机上是没有以前主机设置好的锁数据的——锁丢了……丢了……了……

到这里,终于可以介绍 Redission(开源 Redis 客户端)了,我们来看看它怎么是实现 Redis 分布式锁的。

Redission 实现分布式锁的思想很简单,无论是主从集群还是 Redis Cluster 集群,它会对集群中的每个 Redis,挨个去执行设置 Redis 锁的脚本,也就是集群中的每个 Redis 都会包含设置好的锁数据。

我们通过一个例子来介绍一下。

假设 Redis 集群有 5 台机器,同时根据评估,锁的超时时间设置成 10 秒比较合适。

第 1 步,咱们先算出集群总的等待时间,集群总的等待时间是 5 秒(锁的超时时间 10 秒 / 2)。

第 2 步,用 5 秒除以 5 台机器数量,结果是 1 秒。这个 1 秒是连接每台 Redis 可接受的等待时间。

第 3 步,依次连接 5 台 Redis,并执行 lua 脚本设置锁,然后再做判断:

再额外多说一句,在很多业务逻辑里,其实对锁的超时时间是没有需求的。

比如,凌晨批量执行处理的任务,可能需要分布式锁保证任务不会被重复执行。此时,任务要执行多长时间是不明确的。如果设置分布式锁的超时时间在这里,并没有太大意义。但是,不设置超时时间,又会引发死锁问题。

所以,解决这种问题的通用办法是,每个持有锁的客户端都启动一个后台线程,通过执行特定的 lua 脚本,去不断地刷新 Redis 中的 key 超时时间,使得在任务执行完成前,key 不会被清除掉。

脚本如下:

其中,ARGV[1] 是可传入的参数变量,表示持有锁的系统的唯一值,也就是只有持有锁的客户端才能刷新 key 的超时时间。

到此为止,一个完整的分布式锁才算实现完毕。总结实现方案如下:

这个分布式锁满足如下四个条件:

当然,在 Redission 中的脚本,为了保证锁的可重入,又对 lua 脚本做了一定的修改,现在把完整的 lua 脚本贴在下面。

获取锁的 lua 脚本:

对应的刷新锁超时时间的脚本:

对应的释放锁的脚本:

到现在为止,使用 Redis 作为分布式锁的详细方案就写完了。

我既写了一步一坑的坎坷经历,也写明了各个问题和解决问题的细节,希望大家看完能有所收获。

最后再给大家提个醒,使用 Redis 集群做分布式锁,有一定的争议性,还需要大家在实际用的时候,根据现实情况,做出更好的选择和取舍。

原文 https://www.cnblogs.com/siyuanwai/p/16011836.html

2. 已拿32k小米android高级开发offer(面试题回顾)

到现在我入职也有一段时间了,这才有空梳理一下当时的面试题。简单说下我的情况:这是一次比较平常的跳槽,不是什么逆袭大厂的剧本,只是薪资有所涨幅。

个人经历不详说,面试题对大家来说可能更有参考性,本篇先整理小米的面试题,我前后也面了很多个大厂,有空把其他几个大厂的面试题也总结一下。

java基础肯定是少不了要问的,这轮面试Kotlin相对来说是我这些面试中问得比较多的,所以说准备面试还是要面面俱到。

我有点佩服我的记忆力了。这部分涉及到更多的 源码、原理和优化 方面的问题,Android高级开发需要具备一些什么能力大家也应该有所衡量了。

最后给大家分享一份 2246页 Android大厂高频面试题解析大全 ,基本上把我的面试内容都涵盖到了: Android、性能优化、Java、Kotlin、网络、插件化、热修复、模块化、组件化、增量更新、Gradle、图片、Flutter等。

这份资料免费提供给大家复习,文末查看领取方式,搞定Android面试这一份肯定够了。

第一章 Android相关 (源码分析、性能优化、Framework等)

第二章 性能优化 (GC原理、布局优化、绘制优化、内存优化等)

第三章 Java相关 (四种线程池、JVM、内存管理、垃圾回收、引用等)

第四章 Kotlin相关 (延迟初始化、Reified、Extension Functions、函数等)

第五章 网络相关 (HTTP 知识体系、HttpDns 原理、TCP,UDP,HTTP,SOCKET 之间的区别等)

第六章 插件化&热修复&模块化&组件化&增量更新&Gradle

第七章 图片相关 (图片库对比、LRUCache原理、图片加载原理、Glide等)

第八章 Flutter相关 (Flutter原理、Flutter Hot Reload、Flutter 动态化 探索 、Flutter Platform Channel等)

需要这份资料的朋友私信我【面试题】就可以免费领取。

希望大家都可以把握住每一次自我提升的机会,把每一步都走踏实了,涨薪升职什么的都会迎你而来。

也欢迎大家和我一起交流Android方面的事情。

3. Android面试:字节飞书5轮面试Android Framework层的源码就问了4轮!

说起字节跳动的这次面试经历,真的是现在都让我感觉背脊发凉,简直被面试官折磨的太难受了。虽然已经工作了三年,但是也只是纯粹的在写业务,对底层并没有一个很深的认识,这次面试经历直接的让我感受到我和那些一线大厂开发之间的差距,说句实话,是真的很难受。

也不多说什么了吧,我们还是来回顾一下我在字节跳动的这次面试经历。 一共是面了5轮,至于为什么面了5轮的原因,可能是面试官还是想试试我的技术水平吧

虽然说最终还是没能拿到offer,但是这次的面试经历让我更加直观的了解了我和大厂Android开发之间的差距,算是收益颇丰吧

总体来讲,一面还是答得不错的,或许是面试官觉得小瞧了我,接下来的四轮面试我仿佛遭到了严打

最后唠叨几句,希望各位没拿到offer的真的不要灰心,可能你之前所有的失败都是你成功的垫脚石,我面挂的时候也曾经自闭过,但更多的是反思,如何调整自己的复习计划。在复习的时候一定要有自己的强项,能把这个知识点理解的很透彻并且把相关的知识点拓展出去。另一方面就是让面试官看到你对这个岗位的热情,能够自发性地去学习与岗位相关的东西,下面给大家分享一份我珍藏的《2022最新Android中高级面试题合集》质量非常搞,希望能对你有帮助!

内容概要 :包括 Handler、Activity相关、Fragment、service、布局优化、AsyncTask相关、Android 事件分发机制、 Binder、Android 高级必备 :AMS,WMS,PMS、Glide、 Android 组件化与插件化等面试题和技术栈!内容特点:条理清晰,含图像化表示更加易懂。

Android Framework 开发虽然比较偏底层,圈子窄,但是能掌握一些原理的东西,可以触类旁通,往应用层发展也可以。目前大公司的app开发都要基于模块化、层次化、组件化、控件化的思路来设计架构,而这一切的基础都建立在Android Framework系统框架底层原理实现之上。

4. 2022史上最全Android面试题归纳汇总(附答案解析)

我经历过这么多年的摸爬滚打,面试过也被面试过。现总结与归纳Android开发相关面试题:

1、Activity启动模式有哪些,分别有什么不同?

2、Service启动模式有哪些,对应的生命周期?IntentService呢?

3、ContentProvider的作用,是否支持多线程和多进程

4、Broadcast的注册方式,对应的生命周期是什么,有序和无序那种可以中断广播?

5、AsyncTask的作用,如何使用(包括有哪些方法,能说出同步异步,能说出不同Android版本下的区别加分)

6、有哪些异步的方式?

7、Handler机制

8、Dialog的使用及其生命周期

9、Activity的生命周期,能否改?

10、Fragment的生命周期,能否改?

11、Activity和Fragment如何通信

12、View的绘制机制

13、View的事件传递机制

14、如何监听手势

15、ImageView设置图片显示有哪几种模式,有什么区别?

16、有哪些存储方式

17、SharedPreferences是否支持多进程、多线程

别看以上常问的是入门级的,但是有两三年开发经验能回答圆满的人不多。

1、如何理解Activity的任务亲和性

2、如何让Service为单独的进程

3、IntentService的实现原理

4、LocalBroadcast的作用,实现原理,相对于Broadcast的优势在哪,劣势在哪

5、Handler的缺点,会不会造成内存泄漏,有则如何解决

6、Fragment与Activity的区别和联系

7、Fragment如何缓存布局

8、Fragment与ViewPager的搭配使用,有没有问题重叠问题,怎么解决

9、同时提供侧滑和上下滑动,如何解决事件传播问题

10、是否使用过Design包

11、嵌套滑动理解

12、behavior的原理

13、对设计模式有什么看法,经常使用的有哪些?

中级的稍微偏底层一些,这个主要考察平时是否关注而不是一味地怼业务需求

1、Activity的启动过程

2、Service创建为单独进程会有哪些问题?

3、简述AIDL的构建过程

4、IPC机制有哪些?

5、android多进程通信方式,内部原理

6、App启动的入口在哪?

7、LRU缓存算法

8、Bitmap的有哪几种压缩算法,有啥区别?

9、图片在手机本地存储大小和在内存大小是否一致,为什么,Android默认像素一般占几个字节?

10、第三方框架的熟练程度,如:

11、SharedPreference内部实现原理

12、模块化、插件话、组件化等分别有什么区别,对用有什么好处

13、说说MV * 模式,并画出做过项目的架构图

14、对跨平台方案有哪些了解,使用过哪些? 比如RN

15、对大前端有什么看法,了解多少?使用过什么?

16、对其他语言的了解,kotlin,pythonphp、c++等

17、兴趣爱好是什么?对未来有什么规划?

目前是一些经常会被问到的,当然只是列举了Android 开发方向的,Java的一些还没列举,比如异常、网络、多线程、JCF等等

以上问题的答案在下面都有详细解答,我们不仅整理了这些资料,而且还有一份长达"635页"的Android资料汇总:

包括:底层原理+项目实战+面试专题

虽说Android早已不像过去那般火爆,但各大厂对于中高级开发者仍旧是求贤若渴,想要获取更丰厚的薪资,打铁还得自身硬。对于框架、源码、原理、项目实操经验,都必须有足够的知识储备,才可以在面试中击败面试官。但是由于网上的资料鱼龙混杂,也不成体系,很多人在自我提升的过程中都头疼不已。 这里就给大家分享一份字节大佬整理的《Android中高级面试题汇总(2022)》,帮助大家系统的梳理中高级Android知识!里面包含了所有Android面试的知识点,刷完进大厂妥妥的

(含:静态内部类和非静态内部类的比较,多态的理解与应用, java方法的多态性理解,java中接口和继承的区别,线程池的好处,详解,单例,线程池的优点及其原理,线程池的优点,为什么不推荐通过Executors直接创建线程池,创建线程或线程池时请指定有意义的线程名称,方便出错时回溯,深入理解ReentrantLock与Condition,Java多线程:线程间通信之Lock,Synchronized 关键字原理,ReentrantLock原理,HashMap中的Hash冲突解决和扩容机制, JVM常见面试题, JVM内存结构,类加载机制/双亲委托…)

(含:Activity知识点, Fragment知识点, Service知识点, Intent知识点…)

(含:屏幕适配,主要控件优化,事件分发与嵌套滚动…)

(含:MVP架构设计,组件化架构…)

(含:启动优化,内存优化,绘制优化,安装包优化…)

(含:开源库源码分析,Glide源码分析,OkHttp源码分析,Retrofit源码分析,RxJava源码分析…)

(含:开源文档,面试合集…)

5. 把大厂都面试一遍后,我总结了13条面试经验和面试题(附答案)

近期大大小小面了十几家公司,花了一点时间整理了14条面试经验,希望能帮助到你。

1.面试前要认真准备,及时梳理

你会的和面试中你能讲清楚完全是两码事。不是为了背知识点出去吹牛逼,而是要把自己会的梳理好思路,组织好语言。哪怕几个月前才做过的项目,如果没有做项目复盘,突然让你讲,恐怕未必所有细节都能记得清楚。

2.每面完一家一定要复盘

面试完把没表达好的地方再打磨打磨,一些高频问题的答案组织好提纲,尤其是关于项目的。现场的答案通常逻辑都会很混乱,笔者自己面到最后,依然感觉很难把项目说出亮点来,毕竟我前东家是外包公司,很多技术点没机会做得深入。

3.简历不是一成不变的,要及时调整

基本每面一家都建议调整一下细节,应聘岗位不同,简历所呈现的重点也应不同,所以针对投递的职位,简历要做不同程度的优化。比较心仪的岗位需要根据岗位描述有偏向性地单独准备简历。这样通过率才会更高,在面试中也会让你过面试官更容易抓到你与该岗位的契合点。

4.不要把内推想的太神奇,除非你有够硬的关系。

对大部分人而言,内推的作用就是过简历关,其他方面的作用我不太好评估,每个人的资源不一样。你拿Offer了,内推人拿推荐奖金,你面挂了,推荐人也不会怎么样,打铁还需自身硬,当然这只是自己的看法。

5.控制自己的面试节奏,否则可能会非常辛苦。

每个公司的面试节奏不一样,可以提前找HR问清楚,比如阿里就是平均一个岗位要面一个月,而滴滴我当时早晨一面下午二面,2天后就三面了,进度很快。笔者面试中节奏安排基本是错乱的,中间有几天平均每天1.5个电话面,真的很考验体能。建议综合调研一下可以投的岗位,按照【保底】【满意】【挑战】三个档拉开梯度投简历,毕竟你最后只能选一个,都投到一个档次里意义不大。

6.谨慎面对各大招聘软件上的邀约

招聘软件上会有很多人问你要简历,他们并不是真的对你感兴趣,只是群发消息,建议不要随便给简历,很吓人的。笔者自己第一个蚂蚁金服的面试,就是招聘软件里对方说“先看一下简历”,结果转手就给内推了,当时没有经验,完全不知道面的什么部门什么要求,也不知道面试预约了还可以推掉,结果赶鸭子上架第一个面试一面就栽了,面评表上吃了个很难看的差评,很影响心情。

7.面试中对待不同的面试官要有好的心态

不要把人想的太坏,也不要把人想的太好,想让你过的会帮你找亮点,让你有阐述的机会,不想让你过的就会盯着你不会的点一直问,随时等着放大你任何一个漏洞,面试的过程中你会遇到各种各样的人,当成一种阅历,不卑不亢就好。给我印象比较深刻的是政采云的技面官,花名堂主,面试之余给了我很多忠告和指点,受益匪浅。

8.在面试过程中尽量不要话太多

每个面试官喜好不同,有的人希望你不知道的就说不知道,有的人希望听你的思路和推测,我自己在面试中,有的面试官就说“不知道没关系,你可以讲讲思路,或者如果让你来做,你会怎么做”,也有的面试官开场就说“我问的每个点你简单陈述就行,如果我感兴趣就会自己展开问”,在不明确对方偏好的情况下,建议话少点,说的越多漏洞越多,也容易碰到雷区引起反感。

9.简历尽量投给HR和你认识的搞技术的朋友

这样即便最终没有通过,也大概能知道问题出在哪,原则上面评结果是保密的,但是可以拜托对方针对自己的不足点提供一些关键信息,以便明确下一步努力的方向,面试从来都不是一次决定最终结果的事情,一次栽了,再面其他的就行,如果真的非常向往某个公司或岗位,过一两年再来就行了,重点是你要先敢面。如果简历给到猎头,那么当你面对同等资历的竞争者时可能就会被Pass,因为如果招了你,是需要给猎头付费的,如果简历给了不认识的人内推,极有可能后续什么消息都打听不到,干着急。

10.我强烈建议大家去尝试参加面试

定期去了解大厂的技术动向和对于你这个水平的面试者的评定条件,每个厂都不一样,你的学校、专业技术、工作履历、工作年限、项目管理经验等等都可能被作为指标,尤其是像笔者这种半路出家的野路子码农,千万不要用网上那些经验往自己身上套,差别太大了。很多人都会觉得自己“水平差”,感觉自己“啥都不会”,但是自己感觉自己差和面试中被人吊打完全是两种感觉,后者虽然不好受,但能迫使你做出改变,走出舒适区。

11.面试是一场匹配游戏

不是你越牛逼结果就越理想,面试的关键词是【匹配】。大多数面试者都是劣势的一方,请对自己好点,通过了,告诉自己"运气不错,继续努力,要对得起别人的赏识",没过,也没关系,告诉自己"运气不太好,继续努力就好,总有一天会有人赏识"。对面试中暴露出的技能短板要足够重视,但对于结果,真的没必要太较真,有时候公司的想法并没有那么复杂,就是想招个更年轻更便宜的而已。

12.大厂对于大龄程序员是有“把控”的,不管招聘方承不承认。

13.一定要做一个有亮点的程序员

无论是什么,一定得有跟普通应聘者不一样的地方,可能是业务梳理能力,资源协调能力,跨端开发,跨栈开发,或者某个专项的技术玩的很溜都可以,但一定得有,如果还没有,那就开始培养一个。

你近期面试了吗?欢迎在评论区一起讨论,我这里整理的一些大厂面试资料(附答案)可免费提供,添加QQ群:1020139748  备注即可。

6. 有遇到哪些高质量的Java面试题呢

一般考高会基于你简历的一个点,然后提问一个比较基础的问题,比如对于几十万订单量的处理,根据你的回答逐步深入(扯入高并发,一致性等等),问到你不会或者他满意为止

7. 大厂前端笔试面试题总结(一)

1.从下列选项中找出正确的打印值

A. 'false','true'
B. '"Lydia"','21'
C. 'true','true'
D. 'undefined','undefined'

解析:

注:const、let、var声明的变量在使用delete关键字进行删除时是无效的,且其返回值是false。
正确答案:A

2.从下列选项中找出正确的打印值

A. {admin:true,user:{name:"Lydia",age:21}}
B. {admin:true,name:"Lydia",age:21}
C. {admin:true,user:["Lydia",age:21]}
D. {admin:true}

解析:

注: ...user 使用的是ES6的扩展运算符,默认作用是将user的属性展开平铺,并且和 admin:true 组成一个新的对象。
如果 const user ={name:"Lydia",age:21,admin:false}; 和前面的属性有重名时, ... 扩展运算符会把前面的属性覆盖掉。打印结果就会为: {admin:false,name:"Lydia",age:21}
正确答案:B

3.从下列选项中找出正确的打印值

A. 10
B. 11
C. Error
D. NaN

解析:从模块导出的变量是不能被修改的,只能作为一个只读的变量进行其他文件引入使用。
正确答案:C

4.从下列选项中找出正确的打印值

A. [1,1,2,3,4]
B. [1,2,3,4]
C. {1,1,2,3,4}
D. {1,2,3,4}

解析:

注:Set具有唯一性,输出时会默认过滤掉重复项。Set是一种新的数据结构并不是数组。
数组的去重、找唯一值都可以利用Set形式
正确答案:D

5.从下列选项中找出正确的打印值

A. "Woof I am Mara" , TypeError
B. "Woof I am Mara" , "Woof I am Mara"
C. "Woof I am Mara" , undefined
D. TypeError , TypeError

解析:

正确答案:A

6.从下列选项中找出正确的打印值

A. "undefined","number"
B. "number","number"
C. "object","number"
D. "number","undefined"

解析:

正确答案:A

7.从下列选项中找出正确的打印值

A. Lamborghini
B. "Maserati"
C. ReferenceError
D. TypeError

解析:

正确答案:B

8.从下列选项中找出正确的打印值

A. "It worked! Hello world!"
B. "Oh no an error: undefined"
C. SyntaxError: can only throw error objects
D. "Oh no an Error: Hello world!"

解析:

正确答案:D

A. []
B. [null,null,null]
C. [undefined, undefined,undefined]
D. [3 × empty]

解析:

正确答案:C

10.从下列选项中找出正确的打印值

A. 42
B. "42"
C. 7
D. NaN

解析:
parseInt(string, radix)函数解析字符串并返回整数。

8. 腾讯大佬整理推荐《Android Framework 开发揭秘》突破面试!(附面试宝典)

随着 Android 开发者越来越多,企业在筛选 Android 程序员时越来越看中一个程序员对于 Android 底层原理的理解和思考。

经常面试的人就知道,现在 Framework 算是面试必问知识点了,比如下面一些大厂面试题:

Framework 为开发应用程序提供了非常多的 API,通过调用特殊的 API 构造 APP,满足业务上的需求。正因为有了 Framework 层,应用开发才能事半功倍,专注于业务逻辑实现。

这里给大家分享一份由 腾讯大佬整理推荐的《Android Framework 开发揭秘》以及《2022最新Android中高级面试题合集》。

这份1932页的《2022Android中高级面试题汇总》是总结了2020-2021期间大厂面试中的高频面试题汇总,其中包括腾讯、字节、美团、阿里、网络…等一线互联网大厂。

资料包含: Java基础、Android基础、UI控件、网络通信、架构设计、性能优化、源码流程…

想要深入学习了解 Framework ,突破面试难关,那么这两份《Android Framework 开发揭秘》《2022最新Android中高级面试题合集》一定不要错过。

9. 大厂的前端面试难吗

分享给你一些面试题

一面

小米的面试官给人的感觉很亲切很真诚,是一个体验很不错的面试。

10. 经典面试题-大厂SQL题目

正确答案:

正确答案:

给定 Employee 表,编写一个 SQL 查询,该查询可以获取收入超过他们经理的员工的姓名。在上面的表格中,Joe 是唯一一个收入超过他的经理的员工。

正确答案:

Customers 表:

Orders 表:

例如给定上述表格,你的查询应返回:

正确答案:

例如,给定上面的 Logs 表, 1 是唯一连续出现至少三次的数字。

正确答案:

或者

例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):

正确答案:

例如上述 Employee 表,n = 2 时,应返回第二高的薪水 200。如果不存在第 n 高的薪水,那么查询应返回 null。

正确答案:

示例:

假如数据输入的是上表,则输出结果如下:

注意:
如果学生人数是奇数,则不需要改变最后一个同学的座位。
正确答案:

例如,根据上述给定的 Weather 表格,返回如下 Id:

正确答案:

Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id。

Department 表包含公司所有部门的信息。

编写一个 SQL 查询,找出每个部门工资最高的员工。例如,根据上述给定的表格,Max 在 IT 部门有最高工资,Henry 在 Sales 部门有最高工资。

正确答案:

表1: Person

PersonId 是上表主键

表2: Address

AddressId 是上表主键

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:

FirstName, LastName, City, State

正确答案:

注意,您必只能写一个 Update 语句,请不要编写任何 Select 语句。
例如:

运行你所编写的更新语句之后,将会得到以下表:

正确答案:

这里有张 World 表

如果一个国家的面积超过300万平方公里,或者人口超过2500万,那么这个国家就是大国家。
编写一个SQL查询,输出表中所有大国家的名称、人口和面积。
例如,根据上表,我们应该输出:

正确答案:

Id 是这个表的主键。

例如,在运行你的查询语句之后,上面的 Person 表应返回以下几行:

正确答案:

Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id 。

Department 表包含公司所有部门的信息。

编写一个 SQL 查询,找出每个部门工资前三高的员工。例如,根据上述给定的表格,查询结果应返回:

正确答案

例如上述 Employee 表,SQL查询应该返回 200 作为第二高的薪水。如果不存在第二高的薪水,那么查询应返回 null。

正确答案:

例如,下表 cinema:

对于上面的例子,则正确的输出是为:

正确答案:

请列出所有超过或等于5名学生的课。
例如,表:

应该输出:

Note:
学生在每个课中不应被重复计算。

正确答案:

Users 表存所有用户。每个用户有唯一键 Users_Id。Banned 表示这个用户是否被禁止,Role 则是一个表示(‘client’, ‘driver’, ‘partner’)的枚举类型。

写一段 SQL 语句查出 2013年10月1日 至 2013年10月3日 期间非禁止用户的取消率。基于上表,你的 SQL 语句应返回如下结果,取消率(Cancellation Rate)保留两位小数。

正确答案

示例:

根据以上输入,你的查询应返回以下结果:

说明:所有电子邮箱都是小写字母。

正确答案:

请编写一个查询语句,找出高峰期时段,要求连续三天及以上,并且每天人流量均不少于100。
例如,表 stadium:

对于上面的示例数据,输出为:

Note:
每天只有一行记录,日期随着 id 的增加而增加。

正确答案:

阅读全文

与大厂源码面试题相关的资料

热点内容
gcc编译vi文件 浏览:61
安卓连airpods怎么找耳机 浏览:925
加密货币转账教程 浏览:227
程序员小灰hashmap 浏览:836
国语pdf版 浏览:182
少儿编程作品美丽的小房子 浏览:970
服务器卡在网页上怎么办 浏览:54
用python自制编译器 浏览:951
android分享新浪微博客户端 浏览:26
系统中服务器在哪里下载地址 浏览:1001
新a4安卓手机怎么投屏 浏览:173
pdftoemf 浏览:886
java接口可以实现接口吗 浏览:59
vb编程10个随机函数 浏览:21
程序员个人简介100 浏览:772
土木工程师算法工程师 浏览:92
javaexcel导入oracle 浏览:880
如何设置异地服务器 浏览:882
为什么安卓手机蓝牙耳机不会弹窗 浏览:547
linuxf77编译器安装教程 浏览:949