技术指标

网龙工作要求:

1、负责完成产品服务端框架代码开发;

2、参与系统安全性、可用性、扩展性、稳定性等方面提出解决方案;

3、对软件需求进行分析,细化系统相关的接口或协议的定义。

1、本科及以上学历,计算机相关专业;

2、3年以上开发经验,有B/S项目的设计、分析、架构经验者优先;

3、理解OOP、OOA,了解SOA架构设计,了解设计模式、代码重构;

4、熟悉分布式系统架构设计,熟悉java、Linux、前端技能、移动开发,开源项目者优先;

5、有优秀的学习能力,能快速的掌握各种新知识,并能积极的分享知识带动团队成长。


张提到的问题:

①OOP的基本概念,例如重写与重载的区别、什么是多态。

②Java基础语言,例如String、StringBuilder、StringBuffer区别,Java的垃圾回收机制。

③Java多线程,例如线程安全的容器有哪些、线程锁有哪几个、什么是线程池、有哪几种线程池、有哪几种启动线程的方法。

④设计模式,例如讲解几种常见的设计模式,并举例说明。

⑤Java Web基础知识,例如jsp的9大内置对象、servlet生命周期。

⑥计算机网络,例如讲解一下ISO/OSI 7层模型、讲解一下TCP/IP协议、讲解一下Http协议。

①数组、链表的优缺点

②常用的排序算法有哪些,算法复杂度分别是多少

③讲解一个你做过的项目,重点放在技术要点。



作为一名Android开发者,首先Java基础是要过得去的。面试中Java基础的问题大同小异:

面向对象的基本思想与几个特征(抽象,继承,封装,多态),要求自己能说的出来个所以然。

面向对象的最重要的特征之一的多态,是最常被问到的。问题大概类似于:用一个最简单的例子来描述多态。

/**

* Created by siren93 on 15/8/25.

*/publicclassMain{staticabstractclassA{publicabstractvoidfoo();    }staticclassBextendsA{@Overridepublicvoidfoo(){            System.out.println("B.foo");        }    }staticclassCextendsA{@Overridepublicvoidfoo(){            System.out.println("C.foo");        }    }/**    * 注意这里传入的参数是A的对象,编译时期并不能确定调用的具体是哪个方法    * 因为A类中的foo没有方法体    *@parama    */publicstaticvoidfun(A a){        a.foo();    }publicstaticvoidmain(String[] args){//这里使用A类的引用来指向B和C类的对象,如此就可以在参数中传入A类的子类对象A b =newB();        A c =newC();//运行时期才能确定最终被调用的是B中的还是C中的方法//这样可以使接口的设计与其具体实现分离,便于大型软件的维护fun(b);        fun(c);    }}

Java的数据类型。Java的数据类型分为基本类型与引用类型。基本类型有8种:int, short, long, byte, float, double, boolean,char。这些类型的值所占存储空间大小与生存周期可预知,出于速度的原因将其存在内存的栈区域,在栈中的数据可以共享。此外通过类似String s = “abc”;这种方法创建的对象也存在栈中(先创建引用变量s,再在栈中查找”abc”,如果没有则新建一个放在栈中,再将引用对象指向它)。引用类型必须使用new关键字来创建,由于大小不可知,且是运行时动态创建,所以存储在空间较大但存取相对较慢的堆区域。

Java的Object有哪些方法?(差不多能说出5、6个就能过关,当然要能同时说这些方法的用处与用法。Objective的方法有:clone,hashCode,equals,wait,notify,notifyAll,toString,getClass,finalize)。

wait与sleep的区别:wait来自于Object,而sleep来自Thread;wait让出系统资源,sleep不让;wait只能用在同步块中,sleep用在任意地方。(这里顺带提一下notify与notifyAll,前者随机选择一个等待的对象唤醒,后者唤醒所有等待对象)。

Java线程同步机制(synchronized)用在那些情况下?(某一块或者某一行语句需要保证同一时刻只能有一个线程运行到该处时)

HashTable与HashMap的差别。这个问题的要点是HashTable是线程安全的,HashMap是非线程安全的,所以,由于不存在同步的问题,HashMap的速度要比HashTable快。

HashMap与HashTable的底层实现是什么,为什么它们能够做到快速查询。其实二者的底层实现都是数组,都是经过某些方法,对Key进行运算,得到hash值再通过hash值直接映射到数组的地址上去。所以能够实现快速存取。当hash值存在冲突时,则使用链表来扩充当前hash值在数组中的那个节点。形象一点描述就是一个横着的数组上面挂着一些竖着的尾巴。

String,StringBuilder,StringBuffer。String是定长的,是不可变对象,每次对String对象进行改变长度的操作实际都是生成了新的对象。对StringBuilder与StringBuffer对象的操作都是针对其自身,在字符串对象会经常改变的情况下使用这两个比较好。StringBuffer是线程安全的,而StringBuilder是非线程安全的,所以StringBuilder要快一些。

Java的异常。Java的所有异常都继承于Throwable,分为Error与Exception。 Error大多与代码逻辑无关(如虚拟机错误,oom等)。Exception分为Checked Exception与UnChecked Exception,Exception及其子类为可查异常,又称非运行时异常,编译异常,一定程度上是可以预料的,必须使用try catch块进行处理,否则无法通过编译(例如I/O操作,SQL,网络操作等)。RuntimeException及其子类为不可查异常,是与代码逻辑有关的(例如空指针,数组越界,类型转换错误等),所以不应该对其try catch。

throw与throws,throw用来在方法中抛出一种异常,throws用在方法的声明中表示方法可能会抛出异常(不止一种)。

Java的序列化与反序列化。Java中可通过序列化与反序列化方法将对象持久化保存或者进行远程传输。序列化与反序列化实际上是I/O操作。实现Serializable接口需提供一个Id用来标识版本,版本不兼容的对象是无法反序列化的。可覆写其writeObject和readObject方法来自定义序列化与反序列化。此接口不会调用类的任何构造方法。由同一个ObjectInputStream对象反序列化的是同一个对象。实现Externalizable接口则必须实现其writeExternal与readExternal方法。此接口会调用类的无参构造方法。所以有自定义构造方法的类必须显示定义其默认构造方法。

JDK特性:JDK1.5,泛型,foreach,自动拆装箱,枚举,线程池,静态导入(可直接使用常量而无需类名);JDK1.6,DeskTop类和SystemTray类,轻量级Http Server API,Common Annotation;JDK1.7,对集合类型的语言支持(List= [‘item”]或者{“item”}),不过这样定义的集合不可变,自动资源管理,使用try()申请的资源会被自动管理,不必再手动关闭。

//以前写法privatestaticvoidcustomBufferStreamCopy(File source, File target){    InputStream fis =null;    OutputStream fos =null;try{        fis =newFileInputStream(source);        fos =newFileOutputStream(target);byte[] buf =newbyte[8192];inti;while((i = fis.read(buf)) != -1) {            fos.write(buf,0, i);        }    }catch(IOException e) {        e.printStackTrace();    }finally{        close(fis);        close(fos);    }privatestaticvoidclose(Closeable closable){if(closable !=null) {try{            closable.close();        }catch(IOException e) {            e.printStackTrace();        }    }}//现在写法privatestaticvoidcustomBufferStreamCopy(File source, File target){try(InputStream fis =newFileInputStream(source);        OutputStream fos =newFileOutputStream(target)) {byte[] buf =newbyte[8192];inti;while((i = fis.read(buf)) != -1) {            fos.write(buf,0, i);        }    }catch(IOException e) {        e.printStackTrace();    }}

此外JDK1.7中,switch中可使用String,用0b开头可使用二进制数。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值