美文网首页
实战面试一

实战面试一

作者: 茴香豆的第五种写法 | 来源:发表于2017-03-01 10:30 被阅读0次

目前是大多数打算换工作的最佳时期,像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);

}

这里提到过

相关文章

  • 实战面试一

    目前是大多数打算换工作的最佳时期,像boss直聘,拉勾网,智联每天都有大量的招聘信息,这里我选取了最新拉勾网上的某...

  • Java面试题汇总(二)

    《Netty Zookeeper Redis 高并发实战》,面试必备 +面试必备+面试必备,高并发学习必备好书,没...

  • Java技术集合,BAT面试 必备

    《Netty Zookeeper Redis 高并发实战》,面试必备 +面试必备+面试必备,高并发学习必备好书,没...

  • 创业销售案例

    雨哥300多个创业销售、择业面试、营销策划实战案例、经验分享 雨哥300个创业销售、择业面试、营销策划实战案例...

  • 职场经验

    雨哥300多个创业销售、择业面试、营销策划实战案例、经验分享 雨哥300个创业销售、择业面试、营销策划实战案例...

  • Java架构师必备:Springcloud微服务+Docker+

    小编这里整理了以下的一些实战资料来帮助大家学习,文末还是有很多Java的面试题.需要这些实战资料和面试题的朋友可以...

  • Java架构师必备:Springcloud微服务+Docker+

    小编这里整理了以下的一些实战资料来帮助大家学习,文末还是有很多Java的面试题 需要这些实战资料和面试题的朋友可以...

  • 电子书下载汇总

    《淘宝技术这十年》 《Maven实战》 《Spring Cloud微服务实战》 《编程之美:微软技术面试心得》 《...

  • 开发电子书下载

    《淘宝技术这十年》 《Maven实战》 《Spring Cloud微服务实战》 《编程之美:微软技术面试心得》 《...

  • Android职场

    根据本人多次的面试经历,总结以下几个面试实战问题,分享给大家。 ----Java相关---- JVM内存模型 1、...

网友评论

      本文标题:实战面试一

      本文链接:https://www.haomeiwen.com/subject/taczwttx.html