实战面试一

目前是大多数打算换工作的最佳时期,像boss直聘,拉勾网,智联每天都有大量的招聘信息,这里我选取了最新拉勾网上的某个公司的android岗位的职位要求.看看究竟有什么是公司关心或者是问的最多的面试问题.

岗位职责类就不说了, 都是开发中要遇到的问题,比较官方笼统.

要求(1)

这里先说设计模式之前先说下面向对象的六大基本原则:



单一职责:

通俗来讲就是一个类只有一项职责,不是自己的业务场景不要掺和在一个类里面,其实在项目过程中我们都不自觉的在用这种单一职责.

开闭原则:

意思就是说当产品需求变更的时候,对代码的扩展进行开放,对修改源代码进行关闭,这里有点以增加代码的数量来确保之前功能稳定的意思,但是也是最可行的方式.

里氏替换原则:

说的就是父类子类继承的关系,子类继承父类,共享父类中的已经定义好的非抽象方法,就像通常我们new一个Activity时候通常都会继承BaseActivity了,然后在BaseActivity中可以在写初始化操作,而继承的子类就可以直接使用方法,而无需平凡的创建和销毁.

接口最小化原则:

意思是应该在对类与类之间接口应该细化到最小,这样有利于解耦和,就有点和单一职责一样,相同点在于都是尽可能的缩小范围,不同点在于单一职责说的是单纯的一个类,而接口最小化说的是调用者与接收者之间的关系应细化到最小.

依赖倒置原则:

说的是模块之间不应该产生直接的调用关系,应该通过接口的形式来调用,底层模块应该遵循接口来设定,而不是接口根据底层来设定.

迪米特原则:

一个类对于自己依赖的类,应该知道的越少越好,这样可以降低耦合度

将实现的逻辑都封装在类的内部,实现高内聚,低耦合

=================================================================================

下面来说下设计模式(在之前的文章中有提到过)

单例模式

单例可以供全局访问,避免频繁的创建销毁对象,节省内存开支.

这里就直接写一个静态内部类的单例

public class SingleInstance{

private static class MySinleInstance{

public static final SingleInstance instance=new SingleInstance();

}

public static SingleInstance getInstance(){

return  MysinleInstance.instance;

}

}

工厂模式(factory):

我们要写一个张三要读书的方法.其中有语文,数学,英语三本书.

首先我们定一个book类

public interface Book{

void read();

}

然后语文,数学,英语都是需要实现这个接口

public class ChineseBook implements Book{

public void read(){

system.out.print("ChineseBook");

}

}

...............

然后就是张三读书的方法

public class ReanMan{

public static Book readbook(String name) throws Exception{

if(name.equalsIgnoreCase("chinesebook")){

return new ChineseBook();

}

if(name.equalsIgnoreCase("mathbook")){

return new MathBook();

}

return new EnglishBook();

}

}

最后就是使用方法

ReanMan man = ReanMan.readbook("chinesebook");//让张三来读语文书

man.read();//一键启动

===============================================================================

装饰者模式:

在不影响其他对象的前提下,装饰者模式可以动态的透明的给单个对象添加职责.

代理模式:

抽象对象角色:声明了目标对象和代理对象的共同接口,这样一来在任何可以使用目标对象的地方都可以使用代理对象。

public abstract class AbstractObject{

public abstract void operation();

}

目标对象角色:定义了代理对象所代表的目标对象。

public class RealObject extends AbstractObject{

@override

public void opeation(){

//操作

System.out.print("操作");

}

}

代理对象角色:代理对象内部含有目标对象的引用,从而可以在任何时候操作目标对象;代理对象提供一个与目标对象相同的接口,以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后,执行某个操作,而不是单纯地将调用传递给目标对象。

public class ProxyObject extends AbstractObject{

RealObject  realObject=new RealObject();

@override

public void operation(){

//调用对象之前可以做项目操作

realobject.operation();

//调用对象后可以做相关操作

}

使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。

适配器模式:

我们需要实现某个功能,而现在实现这个功能的组件不必我们自己开发,可以通过第三方的组件(即别人的代码或者自己曾经写过的代码)来实现,但第三方组件的接口与现在所定义的接口不一致(即类名,方法名不一样),那么在不修改两方接口的情况下,可以通过采用适配器模式来解决这一问题。

Activity生命周期

onCreate()-onStart()-onResume()-onPause()-onStop()-onDestroy();

Service

(1)开始startService(),结束:stopService()

(2)开始bindService(),结束:onBindService();

Brodercast

动态广播,需要继承BroadcastReceiver,重写onReceive方法,注册广播registered,解注册unregistered

静态广播,需要在manifast.xml中给定创建,创建后就一直存在,解注册在这里提到过

ContentProvider

这些数据可以存储在文件系统中、在一个SQLite数据库、或以任何其他合理的方式,

其他应用可以通过ContentResolver类从该内容提供者中获取或存入数据

Fragment生命周期

onattch()-oncreate()-oncreteView()-onActivityCreated()-onStart()-onResume-onPause()-onStop()-onDeatroyView()-onDestory()-onDetach()

解决程序OOM问题:

图片过大Bitmap导致OOM

bitmap.recycle();

bitmap = null;

handle依赖在Activity后Activity销毁导致OOM

弱引用,静态内部类

广播未及时销毁导致OOM

ListView中adapter使用不当重复叠加convertview

HTTP请求和JSON解析(原生):

在android6.0之后google就废弃了HttpClient,而采用一直有的HttpUrlConnection进行网络请求,在网络请求框架中,okhttp配合okio.jar使用是目前采用最主流的网络请求框架之一,这里说说原生请求是怎么弄.

String path="http://www.XXXXXXX";

URL url=new URL(path);

HttpURLConnection conn=(HttpURLConnection)url.openConnection();

conn.setConnectTimeout(5*1000);//超时时间

conn.setRequestMethod("GET");//请求方式

InputStream in=conn.getInputStream();//得到输入流

XXX

//建立输出流outputStrem写入文件


JSON解析

JSONObject object=new JSONObject(requestion);

JSONArray array=new JSONArray(object.getString("date"));

for(int i=0;i<array.size();i++){

JSONObject jo = (JSONObject) array.get(i);

}


这里提到过
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,587评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,600评论 18 139
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,192评论 11 349
  • 懒人歌 日上高楼懒起床,倦衣散带懒梳妆。 清晨横卧懒无事,薄暮倚门思课堂。 自谓焦茫唯苦等,岂知懒散无一...
    南枝青木阅读 530评论 18 6
  • 眉黛成双对, 卧蚕饮水醉。 满目青松翠, 涟漪波易碎。
    良柳如烟阅读 272评论 0 3