2019AndroidBATJ面试题设计模式&算法专题总结

6 篇文章 0 订阅
1 篇文章 0 订阅

BATJ等大公司经常需要用到的一些高端Android技术,在这里专门整理搜集了2019算法和设计模式专题,希望大家都可以看看。这些题目有点技术含量,文末提供答案分享。

(一)算法

1.排序算法有哪些?

2.最快的排序算法是哪个?

3.手写一个冒泡排序

4.手写快速排序代码

5.快速排序的过程、时间复杂度、空间复杂度

6.手写堆排序

7.堆排序过程、时间复杂度及空间复杂度

8.写出你所知道的排序算法及时空复杂度,稳定性

9.二叉树给出根节点和目标节点,找出从根节点到目标节点的路径

10.给阿里2万多名员工按年龄排序应该选择哪个算法?

11.GC算法(各种算法的优缺点以及应用场景)

12.蚁群算法与蒙特卡洛算法

13.子串包含问题(KMP 算法)写代码实现

14.一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法

15.万亿级别的两个URL文件A和B,如何求出A和B的差集C(提示:Bit映射->hash分组->多文件读写效率->磁盘寻址以及应用层面对寻址的优化)

16.百度POI中如何试下查找最近的商家功能(提示:坐标镜像+R树)。

17.两个不重复的数组集合中,求共同的元素。

18.两个不重复的数组集合中,这两个集合都是海量数据,内存中放不下,怎么求共同的元素?

19.一个文件中有100万个整数,由空格分开,在程序中判断用户输入的整数是否在此文件中。说出最优的方法

20.一张Bitmap所占内存以及内存占用的计算

21.2000万个整数,找出第五十大的数字?

22.烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?

23.求1000以内的水仙花数以及40亿以内的水仙花数

24.5枚硬币,2正3反如何划分为两堆然后通过翻转让两堆中正面向上的硬8币和反面向上的硬币个数相同

25.时针走一圈,时针分针重合几次

26.N*N的方格纸,里面有多少个正方形

27.x个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完?
#(二)架构设计和设计模式

  1. 请列举出在 JDK 中几个常用的设计模式?
    单例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像 Boolean.valueOf,观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中。装饰器设计模式(Decorator design pattern)被用于多个 Java IO 类中。

  2. 什么是设计模式?你是否在你的代码里面使用过任 何设计模式?
    设计模式是世界上各种各样程序员用来解决特定设计问题的尝试和测试的方法。设计模式是代码可用性的延伸

3.Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
单例模式重点在于在整个系统上共享一些创建时较耗资源的对象。整个应用中只维护一个特定类实例,它被所有组件共同使用。Java.lang.Runtime 是单例模式的经典例子。从 Java5 开始你可以使用枚举(enum)来实现线程安全的单例。

  1. 在 Java 中,什么叫观察者设计模式(observer design pattern )?
    观察者模式是基于对象的状态变化和观察者的通讯,以便他们作出相应的操作。简单的例
    子就是一个天气系统,当天气变化时必须在展示给公众的视图中进行反映。这个视图对象是一个主体,而不同的视图是观察者。

  2. 使用工厂模式最主要的好处是什么?在哪里使用?
    工厂模式的最大好处是增加了创建对象时的封装层次。如果你使用工厂来创建对象,之后你可以使用更高级和更高性能的实现来替换原始的产品实现或类,这不需要在调用层做任何修改。

  3. 举一个用 Java 实现的装饰模式(decorator design pattern) ?它是作用于对象层次还是类层次?
    装饰模式增加强了单个对象的能力。Java IO 到处都使用了装饰模式,典型例子就是Buffered 系列类如 BufferedReader 和BufferedWriter,它们增强了 Reader 和 Writer 对象,以实现提升性能的 Buffer 层次的读取和写入。

  4. 在 Java 中,为什么不允许从静态方法中访问非静态变量?
    Java 中不能从静态上下文访问非静态数据只是因为非静态变量是跟具体的对象实例关联的,而静态的却没有和任何实例关联。

  5. 设计一个 ATM 机,请说出你的设计思路?
    比如设计金融系统来说,必须知道它们应该在任何情况下都能够正常工作。不管是断电还是其他情况,ATM 应该保持正确的状态(事务) , 想想 加锁(locking)、事务(transaction)、错误条件(error condition)、边界条件(boundary condition) 等等。尽管
    你不能想到具体的设计,但如果你可以指出非功能性需求,提出一些问题,想到关于边界条件,这些都会是很好的。

  6. 在 Java 中,什么时候用重载,什么时候用重写?
    如果你看到一个类的不同实现有着不同的方式来做同一件事,那么就应该用重写(overriding),而重载(overloading)是用不同的输入做同一件事。在 Java 中,重载的方法签名不同,而重写并不是。

  7. 举例说明什么情况下会更倾向于使用抽象类而不是接口?
    接口和抽象类都遵循”面向接口而不是实现编码”设计原则,它可以增加代码的灵活性,可以适应不断变化的需求。下面有几个点可以帮助你回答这个问题:

在 Java 中,你只能继承一个类,但可以实现多个接口。所以一旦你继承了一个类,你就失去了继承其他类的机会了。

接口通常被用来表示附属描述或行为如:Runnable、Clonable、Serializable 等等,因此当你使用抽象类来表示行为时,你的类就不能同时是 Runnable 和 Clonable(注:这里的意思是指如果把 Runnable 等实现为抽象类的情况),因为在 Java 中你不能继承两个类,但当你使用接口时,你的类就可以同时拥有多个不同的行为。

在一些对时间要求比较高的应用中,倾向于使用抽象类,它会比接口稍快一点。

如果希望把一系列行为都规范在类继承层次内,并且可以更好地在同一个地方进行编码,那么抽象类是一个更好的选择。有时,接口和抽象类可以一起使用,接口中定义函数,而在抽象类中定义默认的实现。

11.谈谈你对Android设计模式的理解

12.MVC MVP MVVM原理和区别

13.你所知道的设计模式有哪些?

14.项目中常用的设计模式

15.手写生产者/消费者模式

16.写出观察者模式的代码

17.适配器模式,装饰者模式,外观模式的异同?

18.用到的一些开源框架,介绍一个看过源码的,内部实现过程。

19.谈谈对RxJava的理解

20.RxJava的功能与原理实现

21.RxJava的作用,与平时使用的异步操作来比的优缺点

22.说说EventBus作用,实现方式,代替EventBus的方式

23.从0设计一款App整体架构,如何去做?

24.说一款你认为当前比较火的应用并设计(比如:直播APP,P2P金融,小视频等)

25.谈谈对java状态机理解

26.Fragment如果在Adapter中使用应该如何解耦?

27.Binder机制及底层实现

28.对于应用更新这块是如何做的?(解答:灰度,强制更新,分区域更新)?

29.实现一个Json解析器(可以通过正则提高速度)

30.统计启动时长,标准

资料分享+答案整理

篇幅原因面试试题答案我们今年整理在这一份腾讯T4级别的Android架构师全套学习资料里面了,这份学习资料+面试题特别适合有3-5年以上经验的小伙伴深入学习提升,让你成功实现年薪40W以上。
主要包括腾讯,以及阿里、字节跳动,华为,小米,等一线互联网公司主流架构技术。如果你有需要,尽管拿走好了。

**1.腾讯T4级别Android架构师技术脑图;**查漏补缺,体系化深入学习提升

2…全套体系化高级架构视频(七大主流技术模块)

3.2019最新整理BATJ Android高级面试题(含答案解析)

**4.设计面试和数据结构算法专题;**大厂必会,巩固基础

  • 设计模式专题;

  • 数据结构算法专题;

免费分享

在评论区留言或者私信我,视频教程,BAT面试真题解析文档,我看到都会回复的

也可以点击下方链接,前往免费领取腾讯T4级别Android架构师面试资料+全套视频

腾讯T4级别Android架构师面试资料+全套视频

为什么免费分享?

很多开发人员工作几年,技术薪资均没有提升。
程序开发是吃青春饭的工作,有很多志在学习提升,却又苦于找不到学习方向和路线的开发人员。
希望大家通过我分享的这套高级架构资料,结合自身不足、重点学习、系统学习、早日进阶成为Android高级架构师。实现个人理想和创造更多价值。
不负青春对我们的期待,不负时代对我们鞭策。

Android架构师之路很漫长,一起共勉吧!喜欢的话别忘记点击关注和赞哦

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值