Android面试之旅

数据结构基本知识

队列 栈 HashMap 图 二叉树

了解队列 HashMap和二叉树的组成原理以及具体实现机制,图的一般使用,二叉树的深度遍历和广度遍历,以及前中后序遍历的算法(递归算法很基础,建议掌握非递归的算法)。

排序算法以及其对应的空间和时间复杂度的计算

最差情况 冒泡排序n(n-1)/2,快速排序n(n-1)/2、简单插入排序n(n-1)/2、希尔排序O(n1.5),简单选择排序n(n-1)/2、堆排序O(nlog2n) 快速排序法和堆排序法的平均速度是最快的,因为它们的时间复杂度都是O(nlog2n),其他的排序算法的时间复杂度大都是O(n2)。(还有一个归并排序 也可以去了解下。)

计算机网络

了解TCP/ip

了解tcp/ip的三次握手和四次挥手以及tcp传输的特点和操作的意义。

了解UDP和TCP的区别以及Udp的特点

osi七层模型以及对应的作用

ICMP ARP 等等相关协议的作用

ip和子关掩码的作用

了解输入url到网站显示的流程

操作系统

了解虚拟地址和物理地址的互换以及页面的操作

Android

终于到了正题。

Service

  1. 被开启的service通过其他组件调用 startService()被创建。
    这种service可以无限地运行下去,必须调用stopSelf()方法或者其他组件调用stopService()方法来停止它。
    当service被停止时,系统会销毁它。
  2. 被绑定的service是当其他组件(一个客户)调用bindService()来创建的。
    客户可以通过一个IBinder接口和service进行通信。
    客户可以通过 unbindService()方法来关闭这种连接。
    一个service可以同时和多个客户绑定,当多个客户都解除绑定之后,系统会销毁service。
    即是说,你可以和一个已经调用了 startService()而被开启的service进行绑定。
    比如,一个后台音乐service可能因调用 startService()方法而被开启了,稍后,可能用户想要控制播放器或者得到一些当前歌曲的信息,可以通过bindService()将一个activity和service绑定。这种情况下,stopService()或 stopSelf()实际上并不能停止这个service,除非所有的客户都解除绑定。
    当绑定service和所有客户端解除绑定之后,Android系统将会销毁它,(除非它同时被onStartCommand()方法开启).

binder

如果是另外的应用程序使用远程服务,需要做的是复制上面的aidl文件和相应的包构到应用程序中,其他调用等都一样。
编写传递复杂数据类型的远程服务
远程服务往往不只是传递java基本数据类型。这时需要注意android的一些限制和规定:
android支持String和CharSequence
如果需要在aidl中使用其他aidl接口类型,需要import,即使是在相同包结构下;
android允许传递实现Parcelable接口的类,需要import;
android支持集合接口类型List和Map,但是有一些限制,元素必须是基本型或者上述三种情况,不需要import集合接口类,但是需要对元素涉及到的类型import;
非基本数据类型,也不是String和CharSequence类型的,需要有方向指示,包括in、out和inout,in表示由客户端设置,out表示由服务端设置,inout是两者均可设置。

Android应用程序结构

Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c++核心库)、Application
Framework(开发框架包)、Applications (核心应用程序)

JAVA多线程实现方式

继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程

GC

虚引用和前面的软引用、弱引用不同,它并不影响对象的生命周期。在java中用java.lang.ref.PhantomReference类表示。如果一个对象与虚引用关联,则跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回收。
要注意的是,虚引用必须和引用队列关联使用,当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到与之 关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。
  原子性问题,可见性问题,有序性问题
  原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。
  可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值
  有序性:即程序执行的顺序按照代码的先后顺序执行。
  在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配
  堆内存用于存放由new创建的对象和数组
  栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。
  是包装类数据,如Integer, String, Double等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中.

java常见的数据结构以及其组成原理

由于作者已较清楚,所以暂不详细书写,详情可百度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值