前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2020新鲜出炉的“面筋”,够刁钻

2020新鲜出炉的“面筋”,够刁钻

作者头像
Android扫地僧
发布于 2020-07-27 14:54:27
发布于 2020-07-27 14:54:27
63100
代码可运行
举报
文章被收录于专栏:Android进阶Android进阶
运行总次数:0
代码可运行

面试难度还行,但是如果不好好复习,有几个点还真是答不上来

第一部分

共享屏幕,在记事本里敲两个编程题(还算容易的)

①一个整形数组,在原数组上修改,将奇数放在前面,偶数放在后面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
*思路:从数组两端向中间查找,如果指针对应偶数-奇数,则相互对调,
*否则指针继续前移
*/
public static void solution(int[] nums) {
    if (nums == null || nums.length <= 0) return;    
    int left = 0, right = nums.length - 1;    
    while (left < right) {  
       //左边是奇数,指针后移,直到发现偶数        
       if (nums[left] % 2 != 0) {      
             left++;            
             continue;        
       }        
       
       //右边是偶数,指针前移,直到发现奇数        
       if (nums[right] % 2 == 0) {      
             right--;            
             continue;        
       }        
       
       //进行对换        
       int temp = nums[left];        
       nums[left] = nums[right];        
       nums[right] = temp;    
    }
}

② 判断字符串是否是回文字符串,例如abcba

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
*两端往中间进行遍历,只要有一个字符不相等就返回false
*/
public static boolean isReversible(String s) {
    if (s == null || s.isEmpty())   
         return false;            
    int length = s.length();    
    for (int i = 0; i < length / 2; i++) {   
         if (s.charAt(i) != s.charAt(length - i - 1))      
               return false;    
    }    
    return true;
}

第二部分

1.类加载机制,双亲委托

https://www.cnblogs.com/iteacat/p/12569008.html

2. Synchronized volatile关键字,volatile修饰基本数据类型和自定义类型区别,volatile底层实现

volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

volatile仅能使用在变量级别;synchronized则可以使用在变量、方法、和类级别的

volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性

volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞。

volatile标记的变量不会被编译器优化(指令重排);synchronized标记的变量可以被编译器优化

https://blog.csdn.net/u014674862/article/details/89168376

3. 四种引用类型

强引用:不会被回收

软引用:内存不足时回收

弱引用:GC就会回收

虚引用:N/A

4. ContentProvider实现原理(如何跨进程)

getContentResolve->ApplicationContentResolver->ContentProviderProxy<===IBidner====>Transport->NameProvider

https://www.jianshu.com/p/147169640798

5. 发起一个https请求有哪些过程

  • 客户端向服务器发起HTTPS的请求,连接到服务器的443端口;
  • 服务器将非对称加密的公钥传递给客户端,以证书的形式回传到客户端
  • 服务器接受到该公钥进行验证,就是验证2中证书,如果有问题,则HTTPS请求无法继续;如果没有问题,则上述公钥是合格的。(第一次HTTP请求)客户端这个时候随机生成一个私钥,成为client key,客户端私钥,用于对称加密数据的。使用前面的公钥对client key进行非对称加密;
  • 进行二次HTTP请求,将加密之后的client key传递给服务器;
  • 服务器使用私钥进行解密,得到client key,使用client key对数据进行对称加密
  • 将对称加密的数据传递给客户端,客户端使用非对称解密,得到服务器发送的数据,完成第二次HTTP请求。

这里还问我证书是如何传递到客户端的,有点懵,不知道是不是想问Android如何验证证书

6. 有序广播无序广播区别,被拦截后超时机制

普通广播:只要intentFilter的action匹配,则会接收此广播

有序广播:发送出去的广播被广播接收者按照按照Priority属性值大小先后顺序接收,先接受的receiver可以对广播进行修改和截断

这里的超时是指,Android系统(AMS)向一个广播接收器发送无序广播时, 并不需要等待该广播接收器返回结果,就会继续向下一个广播接收器发送广播。但是,当Android系统发送有序广播时,将会等待前一个广播接收器返回结果后(除非处理超时), 才会继续发送向下一个广播接收器发送广播。

这个超时时间还真不知道

7. 进程优先级分类

前台进程>可见进程>服务进程>后台进程>空进程

8. AMS管理的栈有哪几类

这里的栈要区别与所说的Activity启动模式的栈(task)

为了让这许多Activity协同工作而不至于产生混乱,Android平台设计了ActivityStack机制用于管理Activity,其遵循先进后出的原则,系统总是显示位于栈顶的Activity,从逻辑上将,位于栈顶的Activity也就是最后打开的Activity, 这也是符合逻辑的。 在操作应用程序时,每次启动新的Activity,都会将此压入Activity Stack,当用户执行返回操作时,移除Activity Stack顶上的Activity,这样就实现了返回上一个Activty的功能。直到用户一直返回到Home Screen,这时候可以理解为移除了Activity Stack所有的Activity,这个Activity Stack不再存在,应用程序也结束了运行.

共五种:

  1. HOME_STACK_ID Home应用以及recents app所在的栈
  2. FULLSCREEN_WORKSPACE_STACK_ID 一般应用所在的栈
  3. FREEFORM_WORKSPACE_STACK_ID 类似桌面操作系统
  4. DOCKED_STACK_ID
  5. PINNED_STACK_ID 画中画栈

9. uid机制

uid: Android系统中uid用于标识一个应用程序,uid在应用安装时被分配,并且在应用存在于手机上期间,都不会改变。一个应用程序只能有一个uid,多个应用可以使用sharedUserId 方式共享同一个uid,前提是这些应用的签名要相同。

https://www.jianshu.com/p/b33dd49f2ae

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android扫地僧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
字节都到三面了,结果还是凉了。。。
今天给大家分享一个校招同学字节后端一二三面的面经,同学顺利通过一二面,可惜最后一轮三面的时候挂了。
小林coding
2024/04/02
2.6K0
字节都到三面了,结果还是凉了。。。
Android高级:内部类的理解,多态,run和start,wait和seelp,线程安全,堆和栈,synchronized 和volatile ,AsyncTask,Binder的机,view的原理
java中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿名内部类(没构造方法)、静态内部类(static修饰的类,不能使用任何外围类的非static成员变量和方法, 不依赖外围类)
zhangjiqun
2024/12/16
850
Android高级:内部类的理解,多态,run和start,wait和seelp,线程安全,堆和栈,synchronized 和volatile ,AsyncTask,Binder的机,view的原理
攒了一个月的Android面试题及详细解答,年底准备起来,冲刺大厂单车变摩托!(上)
一个月前呢,为了巩固下自己的基础以及为以后的面试做准备,每天去找一些大厂的面试真题,然后解答下,然后自己确实也在这个过程中能复习到不少以前没有重视的问题,今天就总结下之前一个多月总结的面试题,难度不大,大佬可以直接路过,当然发发善心点个赞也是可以的❤️。
Android技术干货分享
2020/11/19
4570
攒了一个月的Android面试题及详细解答,年底准备起来,冲刺大厂单车变摩托!(上)
大厂面试题集合之蚂蚁一面
平衡二叉树也叫做平衡二叉搜索树,是二叉搜索树的升级版,二叉搜索树是指节点左边的所有节点都比该节点小,节点右边的节点都比该节点大,而平衡二叉搜索树是在二叉搜索的基础上还规定了节点左右两边的子树高度差的绝对值不能超过1
@派大星
2023/12/26
1550
大厂面试题集合之蚂蚁一面
字节跳动|字节客户端|一二三面+hr面(已Offer,持续更新)
算法题一,给一个数n,和一个数组,用数组中的数组成最大的小于n的数,数组中的数可以重复使用(贪心)
疯狂的KK
2023/04/10
3690
Android 全局广播的使用
广播作为Android一个重要的组成部分,很多功能的实现都依赖于广播,Android系统在发生一些重要事情的时候都会发送广播(电量变化、网络变化等等)。我们也可以在自己得应用程序中发送广播信息,一些能够接受到特定的广播信息的广播接收器就能够接收到对应的广播信息。进而进行事件处理,那么首先我们来看一下广播的基本使用方法。
指点
2019/01/18
2.1K0
Android 全局广播的使用
《Android面试题思考与解答》2021年1月刊
要声明的一点是:面试题的目的不是为了让大家背题,而是从不同维度帮助大家复习,取长补短。
码上积木
2021/03/10
6240
HTTPS终于搞懂了
近些年来,越来越多的网站使用 HTTPS 协议进行数据传输,原因在于 HTTPS 相较于 HTTP 能够提供更加安全的服务。
捡田螺的小男孩
2023/02/22
1K0
HTTPS终于搞懂了
瓜子面经汇总
HashMap是常用的Java集合之一,是基于哈希表的Map接口的实现。不支持同步和允许null作为key和value。
武培轩
2018/10/25
7240
从0系统学Android--5.1 广播机制
Android 中每个应用程序都可以对自己感兴趣的广播进行注册,这样当注册的广播发出时,应用程序就会接受到。这些广播可能来自系统,也可能来自其他应用程序。
开发者
2020/03/11
5140
Android四大组件全面解析,夯实基础。
为什么onDestroy没有执行? 用一句话概述 不要在onStop,onDestory中保存重要数据;最近任务栏清除app,app的onDestory不会掉用是因为该Binder调用是非阻塞的,导致App被杀死,所以onDestory没来得及调用 详细链接参考 https://blog.csdn.net/u013122625/article/details/77916482
Petterp
2022/02/09
9450
Android四大组件全面解析,夯实基础。
BroadcastReceive基础知识总结「建议收藏」
###7、接收系统广播 * 1、开机启动广播 * 我们经常会有这样的应用场合,比如消息推送服务,需要实现开机启动的功能,要实现这个功能,我们就可以订阅系统“启动完成”这条广播,接收到这条广播,我们就可以启动自己的服务了
全栈程序员站长
2022/08/31
4810
BroadcastReceive基础知识总结「建议收藏」
精选Android中高级高频面试题:四大组件及Fragment原理
延伸:从整个生命周期来看,onCreate和onDestroy是配对的,分别标识着Activity的创建和销毁,并且只可能有一次调用; 从Activity是否可见来说,onStart和onStop是配对的,这两个方法可能被调用多次; 从Activity是否在前台来说,onResume和onPause是配对的,这两个方法可能被调用多次; 除了这种区别,在实际使用中没有其他明显区别;
Android技术干货分享
2020/04/21
2.1K0
精选Android中高级高频面试题:四大组件及Fragment原理
2021年Android面试题及答案收集(不断更新中)
如何招聘人,搜集了一些知识点。如何做好应聘准备,也收集了一些主要知识点,供你参考。
全栈程序员站长
2022/07/28
9310
Carson带你学Android:手把手教你学会广播组件-BroadcastReceiver
当此 App首次启动时,系统会自动实例化mBroadcastReceiver类,并注册到系统中。
Carson.Ho
2022/03/24
7220
Carson带你学Android:手把手教你学会广播组件-BroadcastReceiver
Android面试题大全
Android面试题总结 Android四大组件 Activity(活动) 概念 Service(服务) 概念 定义与作用 Content Provider(内容提供器) 介绍 作用 系统的Content Provider 自定义Content Provider Broadcast Receiver(广播) 概述 广播的作用 广播接收者的创建 广播接收者的类型 注册广播的两种方式 静态注册和动态注册的区别 有序广播和无序广播的区别 有序广播接收者们的优先级 有序广播的拦截和篡改 Android类加载器 An
是阿超
2022/11/02
1.4K0
Android四大组件Broadcast中注册广播registerReceiver流程源代码详解
在Android系统中,为什么需要广播机制呢?广播机制,本质上它就是一种组件间的通信方式,如果是两个组件位于不同的进程当中,那么可以用Binder机制来实现,如果两个组件是在同一个进程中,那么它们之间可以用来通信的方式就更多了,这样看来,广播机制似乎是多余的。然而,广播机制却是不可替代的,它和Binder机制不一样的地方在于,广播的发送者和接收者事先是不需要知道对方的存在的,这样带来的好处便是,系统的各个组件可以松耦合地组织在一起,这样系统就具有高度的可扩展性,容易与其它系统进行集成。在软件工程中,是非常强调模块之间的高内聚低耦合性的,不然的话,随着系统越来越庞大,就会面临着越来越难维护的风险,最后导致整个项目的失败。Android应用程序的组织方式,可以说是把这种高内聚低耦合性的思想贯彻得非常透彻,在任何一个Activity中,都可以使用一个简单的Intent,通过startActivity或者startService,就可以把另外一个Activity或者Service启动起来为它服务,而且它根本上不依赖这个Activity或者Service的实现,只需要知道它的字符串形式的名字即可,而广播机制更绝,它连接收者的名字都不需要知道。
全栈程序员站长
2022/10/01
6320
Android知识点基础篇(一)
1. Application的生命周期   Application和Activity,Service一样,是Android框架的一个系统组件,当Android程序启动时系统会创建一Application 对象,用来存储系统的一些信息。   Application对象的生命周期是整个程序中最长的,它的生命周期就等于这个程序的生命周期。因为它是全局的单例 的,所以在不同的Activity,Service中获得的Application对象都是同一个对象。所以可以通过Application来进行一些,数据传递,数据共享,数据缓存等操作。   在Application中如果保存对象有导致内存泄漏的风险。并且在onCreate中执行耗时操作会直接影响程序的启动时间。 onCreate() 程序创建的时候执行。 onTerminate()程序终止的时候执行,当程序是被内核终止以便为其他应用程序释放资源,不会被调用。 onLowMemory()低内存的时候执行。可以用来释放一些不必要的资源来应对后台程序已经终止,前台应用程序内存还不够时的情况。 onConfigurationChanged(Configuration newConfig)配置改变时触发这个方法。 onTrimMemory(int level)程序在进行内存清理时执行。
饮水思源为名
2018/12/27
6070
【Android】Broadcasts详解
Android应用程序可以发送广播,也可以接收Android系统或者其它应用发出的广播,这跟发布-订阅设计模式很相似。当一些受到关心的事件发生后,广播会被自动发送。举例来说,当一些系统事件(如开机,设备开始充电等)发生,Android系统会发送广播。应用程序也可以发送自定义的广播,比如当某个应用关注的事件(如数据更新等)发生后可以发送广播提醒它。
全栈程序员站长
2022/07/02
8890
Android 四大组件之一:BroadCastReceiver动态注册广播流程
1.在Activity中动态注册广播时,调用registerReceiver方法,会调用到ContextWrapper的registerReceiver方法:
北洋
2021/12/08
1.9K0
Android 四大组件之一:BroadCastReceiver动态注册广播流程
推荐阅读
相关推荐
字节都到三面了,结果还是凉了。。。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验