自上周怒辞职以后,就開始苦逼的各种面试生涯,生活全然靠私活来接济,时有时没有,真难。还能快乐的玩耍吗。最多一天面试了5家,哎感觉都是不急招人,各种等待通知。好不easy等来一家。还克扣了薪资,从我要的12k到他们给8k,感觉累觉不爱。

面试都是基本过了二面的,大到腾讯,阿里。百度。网易,小到15人的创业公司我都去了,难得今天歇息一下。总结以下试经验。以便下次面试用到。技术题目我就不说了,这是基础。不会的还是把基础看下吧。后面的题目都是让人蛋疼的机制问题。

、什么是线程。线程和进程的差别,线程的工作原理

线程就是程序运行流中最小单元。是系统独立调度的基本单位,线程不具有不论什么系统资源。这里须要特别注意,

就象程序一样,线程有生命周期:它们启动、运行,然后完毕。一个程序或进程或许包括多个线程。而这些线程看来互相单独地运行。

线程是通过实例化Thread对象或实例化继承Thread的对象来创建的。但在对新的Thread对象调用start()方法之前,这个线程并没有開始执行。当线程执行到其run()方法的末尾或抛出未经处理的异常时,它们就结束了。

sleep()方法能够用于等待一段特定时间;而join()方法可能用于等到还有一个线程完毕。

线程的一些基本方法:

isAlive():推断线程是否还"活"着

   getPriority():获得线程的优先级数值

   setPriority():设置线程的优先级数值

   Thread.sleep():将当前线程睡眠指定毫秒数

   join():调用某线程的该方法,将当前线程与该线程"合并",即等待该线程结束,再恢复当前线程的执行

   yield():让出cpu,当前线程进入就绪队列等待调度

   wait():当前线程进入对象的wait pool

   notify()/notifyAll():唤醒对象的wait pool中的一个/全部等待线程

特别注意sleep和wait的差别:

Wait是Object类的方法,范围是使该Object实例所处的线程。

Sleep()是Thread类专属的静态方法,针对一个特定的线程。

Wait方法使实体所处线程暂停执行,从而使对象进入等待状态,直到被notify方法通知或者wait的等待的时间到。Sleep方法使持有的线程暂停执行。从而使线程进入休眠状态。直到用interrupt方法来打断他的休眠或者sleep的休眠的时间到。

线程和进程的差别:

(1)地址空间:进程内的一个运行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;

(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源

(3)线程是处理器调度的基本单位,但进程不是.

多线程

很多线程在运行中必须考虑与其它线程之间共享数据或协调运行状态。这就须要同步机制。

在Java中每一个对象都有一把锁与之相应。

synchronized语句计算一个对象引用,试图对该对象完毕锁操作, 而且在完毕锁操作前停止处理。当锁操作完毕synchronized语句体得到运行。当语句体运行完毕(不管正常或异常),解锁操作自己主动完毕。

作为面向对象的语言,synchronized常常与方法连用。一种比較好的办法是,假设某个变量由一个线程赋值并由别的线程引用或赋值,那么全部对该变量的訪问都必须在某个synchromized语句或synchronized方法内。

、怎样去理解handler,message,messagequeen,looper,一个message是否有几个looper,你写过looper没有。

、MessageQueue:是一种数据结构,见名知义。就是一个消息队列,存放消息的地方。每个线程最多仅仅能够拥有一个MessageQueue数据结构。创建一个线程的时候,并不会自己主动创建其MessageQueue。通常使用一个Looper对象对该线程的MessageQueue进行管理。

主线程创建时,会创建一个默认的Looper对象,而Looper对象的创建。将自己主动创建一个Message
Queue。

其它非主线程。不会自己主动创建Looper,要须要的时候,通过调用prepare函数来实现。

、Message:消息对象,Message Queue中的存放的对象。

一个Message Queue中包括多个Message。Message实例对象的取得。通常使用Message类里的静态方法obtain(),该方法有多个重载版本号可供选择;它的创建并不一定是直接创建一个新的实例,而是先从Message
Pool(消息池)中看有没有可用的Message实例,存在则直接取出返回这个实例。

假设Message Pool中没有可用的Message实例,则才用给定的參数创建一个Message对象。

调用removeMessages()时,将Message从Message Queue中删除,同一时候放入到Message Pool中。

除了上面这样的方式,也能够通过Handler对象的obtainMessage()获取一个Message实例。

、Looper:

是MessageQueue的管理者。每个MessageQueue都不能脱离Looper而存在,Looper对象的创建是通过prepare函数来实现的。

同一时候每个Looper对象和一个线程关联。通过调用Looper.myLooper()能够获得当前线程的Looper对象创建一个Looper对象时。会同一时候创建一个MessageQueue对象。除了主线程有默认的Looper。其它线程默认是没有MessageQueue对象的,所以,不能接受Message。如须要接受。自定义一个Looper对象(通过prepare函数),这样该线程就有了自己的Looper对象和MessageQueue数据结构了。Looper从MessageQueue中取出Message然后,交由Handler的handleMessage进行处理。

处理完毕后,调用Message.recycle()将其放入Message
Pool中。

、Handler:

消息的处理者,handler负责将须要传递的信息封装成Message。通过调用handler对象的obtainMessage()来实现。将消息传递给Looper,这是通过handler对象的sendMessage()来实现的。继而由Looper将Message放入MessageQueue中。

当Looper对象看到MessageQueue中含有Message,就将其广播出去。该handler对象收到该消息后,调用对应的handler对象的handleMessage()方法对其进行处理。

子线程和UI线程的差别,子线程的工作原理。怎样更改UI。

这个比較简单一些,了解了上面的内容就知道子线程发送message,通过handler的handleMessage方法去获取message然后更新UI。

遇到过OOM没有,举个你优化OOM的样例,

Oom是指内存溢出,普通情况是图片过大造成的。

解决方式:

(1)缓存图像到内存,採用软引用缓存到内存,而不是在每次使用的时候都从新载入到内存。

(2)调整图像大小。手机屏幕尺寸有限,分配给图像的显示区域本身就更小,有时图像大小能够做适当调整;

(3)採用低内存占用量的编码方式。比方Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省内存;

(4)及时回收图像,假设引用了大量Bitmap对象。而应用又不须要同一时候显示全部图片,能够将临时用不到的Bitmap对象及时回收掉。

(5)自己定义堆内存分配大小,优化Dalvik虚拟机的堆内存分配。

5GC的工作原理

Garbage Collection简称为GC,是垃圾回收的意思、内存处理器是编程人员easy出现故障的地方。忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃。Java语言提供的GC功能能够自己主动的检測对象是否超过作用域。从而达到自己主动回收内存的目的,java语言没有提供释放已分配内存的显示操作方法,资源回收工作所有交由GC来完毕。程序猿不能精确的控制垃圾回收的时机。

GC在实现垃圾回收时的基本原理:

Java的内存管理实际就是对象的管理。当中包含对像的分配和释放。对于程序猿来说。分配对象使用newkeyword,释放对象时仅仅是将对象赋值为null,让程序猿不可以再訪问到这个对象,该对象被称为“不可达”。

GC将负责回收全部“不可达”对象的内存空间。

对于GC来说,当程序猿创建对象时,GC就開始监控这个对象地址、大小以及使用情况。通常GC採用有向图的方式记录并管理堆中的全部对象,通过这样的方式确定哪些对象是“可达”的,哪些对象是“不可达”的。当GC确定一些对象为“不可达时”GC就有责任回收这些内存空间,但为了GC可以在不同的平台上实现,java规范对GC的非常多行为都没有进行严格的规定。比如对于採用什么类型的回收算法、什么时候进行回收等重要问题都没有明白的规定,因此不同的JVM实现着不同的的实现算法。这也给JAVA程序猿的开发带来了非常多不确定性。

依据GC的工作原理,能够通过一些技巧和方式让GC执行更快,高效而又合理。编程建议例如以下:

、尽早释放无用对象的引用,特别注意一些复杂对象,如数组。队列等。

对于此类对象,GC回收它们的效率一般较低,假设程序同意,应尽早将不用的引用对象赋为null,这样能够加速GC的工作。

、尽量少用finalize函数。

finalize是java提供给程序猿用来释放对象或资源的函数,可是它会加大GC的工作量,因此尽量少採用finalize函数回收资源。

说下你的IPC通信的理解

Android系统中大量使用了基于C/S模式的通信方式。诸如短信操作,电话操作,视频音频捕获,传感器等都以服务(Service)的形式提供,并由对应的Server负责管理,应用程序作为Client仅仅须要与这些Server建立连接并发送请求便能使用这些服务。因此,开发人员全然不必关心Service的实现细节,直接与Server建立连接然后使用其提供的接口就可以。

Client和Server通常是执行在不同的进程中的。这就涉及到进程间通信(IPC,Inter-ProcessCommunication)。为了保证系统安全性。提高通信效率以及提供对C/S模式的支持,Android採用了一种基于共享内存的IPC机制——Binder机制。

详细的实现方法就是AIDL,这属于技术方面了。不懂的能够百度。

7http和tcp通信的你做过什么项目

http重点是url和httpclient。

状态码为1这一类型的状态码。代表请求已被接受。须要继续处理。这类响应是暂时响应,仅仅包括状态行和某些可选的响应头信息。并以空行结束。

状态码为2这一类型的状态码,代表请求已成功被server接收、理解、并接受。

状态码为3这类状态码代表须要client採取进一步的操作才干完毕请求。

通常,这些状态码用来重定向,兴许的请求地址(重定向目标)在本次响应的 Location 域中指明。

状态码为4为错误码

状态码为5server错误

TCP重点就是sokect。

复写过view吗?viewgourp里面有些什么方法?

自己定义view重要的是复写ondraw方法。

View是继承viewgroup的,所以复写viewgroup能实现我们想要一切东西,viewgroup基本的方法:

Onlayout()方法负责把该view放在參数指定位置。

onMeasure()方法不但能够为ViewGroup指定大小。还能够通过遍历为每个子View指定大小。在自己定义ViewGroup中加入上面代码为ViewGroup中的每个子View分配了显示的宽高。

onDraw重绘view

Android面试总结经的更多相关文章

  1. Android面试一天一题(1Day)

    写在前面 该博客思路源于在简书看到goeasyway博主写的Android面试一天一题系列,无copy之意,仅为让自己总结知识点,成长一点点.先感谢各位大神的无私分享~! 关于题目,大部分则出自And ...

  2. Android面试总结 (转)

    1. 下列哪些语句关于内存回收的说明是正确的? (b) A. 程序员必须创建一个线程来释放内存 B. 内存回收程序负责释放无用内存 C. 内存回收程序允许程序员直接释放内存 D. 内存回收程序可以在指 ...

  3. 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18) eoe上看到的

    ===============eoeAndroid社区推荐:======================= 1.Android开发新浪面试题[开发者必看哦]下载地址 http://www.eoeand ...

  4. Android面试题目及其答案

    转自:http://blog.csdn.net/wwj_748/article/details/8868640 Android面试题目及其答案 1.Android dvm的进程和Linux的进程, 应 ...

  5. Android面试题目2

    1. 请描述下Activity的声明周期. onCreate->onStart->onRemuse->onPause->onStop->onRestart->onD ...

  6. 百度的android面试总结分析

    今天就是今天上午10点,我接到了百度的电话面试,当然提前和我说了,我的拖延症是有多强烈,以至于我没怎么准备,当然我也想着看看自己的真实水平,在此检讨一下!!!!!!!!!!!!!!!!!!!!!!!! ...

  7. Android面试之高级篇

    结合自己之前去很多大公司的面试经历和自己面别人的一些题,这里做一些总结,Android面试中常见的面试题. 1,Android的Handler运行机制 要解释Handler的运行机制就要讲几个对象:M ...

  8. Android 面试问答

    Android 面试问答 目录 数据结构和算法 java核心知识 Android核心知识 架构 设计相关问题 相关工具和技术 Android 测试驱动开发 其他 数据结构和算法 ******关于此类问 ...

  9. Android面试优雅地介绍自己的项目

    本文转载:m.blog.csdn.net/iamsamzhang/article/details/51916584 先说句题外话,很多公司16年秋招的内推已经开始啦,我目前知道的在北京有网易.百度和微 ...

  10. 【Android 面试基础知识点整理】

    针对Android面试中常见的一些知识点整理,Max 仅仅是个搬运工.感谢本文中引用文章的各位作者,给大家分享了这么多优秀文章.对于当中的解析,是原作者个人见解,有错误和不准确的地方,也请大家积极指正 ...

随机推荐

  1. BlocksKit(2)-DynamicDelegate

    BlocksKit(2)-DynamicDelegate 动态代理可以说是这个Block里面最精彩的一部分了,可以通过自己给一个类的的协议方法指定对应的block来实现让这个协议的回调都直接在bloc ...

  2. [CF183D]T-shirt

    [CF183D]T-shirt 题目大意: 有\(n(n\le3000)\)个人和\(m(m\le300)\)种T恤,每个人都有一种喜欢的T恤,你知道每个人喜欢每种T恤的概率\(p_{i,j}\). ...

  3. hdu 1208 记忆化搜索

    题目大意:只能按照格子上的数字*方向走,从左上走到右下Sample Input42331121312313110Sample Output3 直接记忆化搜索,注意是0的情况 #include<c ...

  4. 【BZOJ-3527】力 FFT

    3527: [Zjoi2014]力 Time Limit: 30 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 1544  Solved: 89 ...

  5. hdoj 5119 Happy Matt Friends 背包DP

    Happy Matt Friends Time Limit: 6000/6000 MS (Java/Others) Memory Limit: 510000/510000 K (Java/Others ...

  6. wikioi 1380 没有上司的舞会 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他 ...

  7. Linux常用命令&定位生产报错日志

    1. cd / 到根目录下 2. cd .. 返回上层目录 3.ls 显示当前目录有哪些文件 4. pwd 显示当前目录 5. ps -ef|grep tomcat7 查看当前运行进程 6. kill ...

  8. Win8开机直接进桌面方法

    最新的Win8系统由于新增开始屏幕(UI)界面,专门为触摸设备准备,并且很多喜欢尝鲜的电脑爱好者朋友在我们传统的电脑上安装了Win8系统,不少PC用户开始都不喜欢Win8开机后进入UI界面而非传统的电 ...

  9. WCF服务端调用client.

    wcf服务端 1,新建一个"windows窗口程序"名称为WCFServer2. 2.然后加入一个"WCF服务"名称为Service1. 详细步骤为:解决方式试 ...

  10. C#引用类型转换,到底使用is,as还是显式强转?

    在C#中,当引用类型需要转换的时候,经常会用到关键字is.as以及显式强转.本篇来体验这三者的用法. 先来梳理.NET引用类型转换的"约定俗成",或者叫"惯例" ...