——————————————————————————————————————————————蚂蚁金服惨痛的一面——————————————————————————————————————————————
- 本科学过什么计算机课程,比如数据结构都讲过什么?
注:就算本科学的不多,也不要说学的不多。。 - Android四大组件?
- 对HTTP协议了解吗?GET和POST区别是什么?
答:
1)GET在语义上用于获取信息,POST用于新增和更新
2)GET是安全和幂等的(总是返回相同的信息)
3)Get把请求的数据G附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连;Post则是在内容(body)里 - OSI 7层模型:
(TCP/IP的主机到网络层)物理层:维护物理连接
(TCP/IP的主机到网络层)数据链路层:PPTP/L2TP等。物理寻址,同时将原始比特流转化为逻辑线路
(TCP/IP的网络互联层) 网络层:IP。逻辑地址寻址等。
(TCP/IP的传输层) 传输层:TCP/UDP,NetBios等
(TCP/IP的应用层) 会话层:管理会话,如SSL
(TCP/IP的应用层) 表示层:数据的表示、压缩。如JPEG
(TCP/IP的应用层) 应用层:HTTP、FTP、DNS、DHCP等 - (我猜他可能会问的其他问题,包括同学被金服问到的)
1)http和https区别
答:
明文/SSL(安全套接字层)加密;
在 OSI 网络模型中,HTTP 工作于应用层,而 HTTPS 工作在传输层;(创建一个加密的 SSL 连接,基于该 SSL 连接传递 HTTP 请求)
80端口/443端口;
https需要证书;
http无状态
2)TCP和UDP区别
1.基于连接VS无连接;
2.对系统资源的要求(TCP较多,UDP少);
3.传输可靠VS传输不可靠(丢包)
4.速度慢VS速度快
5.保证数据顺序VS不保证数据顺序
3)TCP/IP三次握手 & 4次撒手
握手:client->syn(j) server->syn(j+1)+ack(k) client->ack(k+1) ESTABLISHED
撒手:client->FIN置1 B将ACK置1 然后client->Server关闭; Server->FIN置1 A将ACK置1 然后Server->Client关闭
见Job_network.pdf
4)给定大量的字符串,如何找到特定的字符串?
答:Trie树(字典树):非二叉树,一个结点有n个子节点(比如用来查字符串就是最多26个子节点)。根节点不包含字符,除根节点外每一个节点都只包含一个字符。不同于B树,结点里只有指向子节点的引用而没有值。
另,关于B树:各种B树是为了避免因磁盘访问过频(外查找)降低查找效率而产生的多路查找树,一般树高度不高。
B树:结点里有存放值的大小n-1的数组和存放子节点引用的大小为n的数组,类似二叉查找的感觉;(见下面网址里的图)
B+树:结点里有存放值的大小n的数组和存放子节点引用的大小为n的数组;所有的叶子结点中包含了全部关键字的信息;所有的非终端结点可以看成是索引部分。这三点是最主要的差异
R树:可以用来做高维查找,类似B树,比如查找最近的100个餐馆。
参考:http://blog.csdn.net/v_JULY_v/article/details/6530142/
5)HTTP结构
1.请求行(请求方法、请求网址、HTTP版本)
2.HTTP头(通用头,如;Cache-Control;实体头,如Content-Length;请求头,如Accept,Host;响应头,如Set-Cookie,Refresh等)
3.内容
6)final的用法
1.用在类上,不可继承;用在方法上,不可被复写;用在变量上,不可被修改,final参数同理。但是final变量也可以先不初始化
7)TreeMap和HashMap区别:前者基于红黑树实现,不允许null,key不可以重复,元素应当实现Comparable(集合内复写)接口或者传进去Comparator(作为参数)接口,会按照排序后的顺序保存以及迭代元素
——————————————————————————————————————————————————————————Java常见问题——————————————————————————————————————————————————————————
- String StringBuilder StringBuffer区别
- String:不可变序列(final char[])
- StringBuffer: 线程安全(char[]),被synchronized修饰过
- StringBuilder: 非线程安全,与2.方法基本相同,速度稍快,适合单线程。
-
hashCode作用
判断对象不等,容器类等 -
hashmap hashtable 区别
1.线程不安全vs线程安全。
2.允许null作为键/值(因此不能用get()来判断是否存在此元素╮(╯▽╰)╭) VS 不允许null作为键/值(同TreeMap)
3.不仅是hashCode() VS 直接用hashCode()
4.继承自AbstractMap VS 继承自Dictionary
5.遍历方式不同、扩容有细微差别等
另外,线程安全依赖的就是线程同步,两者是一个意思。 -
Collection和Collections区别
前者是集合的接口,后者包含有各种有关集合操作的静态多态方法 -
Exception和Error包结构
Throwable下面有Error和Exception。
然后Exception又分CheckedException(必须编译之前就修正的,比如IOException)和RuntimeException。
Error是JVM的问题,不是程序触发的,比如OOM,不'应该'被catch。(倒是也可以被catch,如果用catch(Throwable e)的话) -
Override和Overload
前者必须完全一致,后者只需要方法名相同即可,参数、返回值都可以不同。 -
java多态的实现原理:运行时动态绑定
静态绑定:
如果方法是private、static、final或者构造器,编译器就可以确定调用那个方法。这是静态绑定。
动态绑定:
方法表是动态调用的核心,它被存储于JVM方法区中的类型信息,包含有所有方法及指向这些方法代码的指针。
*无需特别明白:“总体而言某个方法被调用时,JVM 首先要查找相应的常量池,得到方法的符号引用 比如#12,并查找调用类的方法表以确定该方法的直接引用#15,最后才真正调用该方法”
参见:http://blog.csdn.net/huangrunqing/article/details/51996424
额外,动态绑定只针对方法,不针对成员变量。比如
问:SuperClass sc = new SubClass();后直接访问父类、子类中都定义了的一个同名变量,输出的一定是父类的(想访问子类可以实现getter方法)
参见:http://blog.sina.com.cn/s/blog_4de067e40100ma2q.html -
foreach和for循环对比
1.直接for效率最高,因为foreach 编译成 字节码之后,使用的是迭代器实现的,所以效率略低。
2.在foreach中不能向迭代变量赋值
注:经过测试,如果用ArrayList,foreach慢一倍;如果用LinkedList(for里还是用get方法),则for要慢一百多倍。 -
反射原理
每当编写并编译了一个新类就会保存在一个同名的.class文件中。
【每个类被加载进入内存之后,系统就会为该类生成一个对应的java.lang.Class对象,通过该Class对象就可以访问到JVM中的这个类.】
Class.forName(String className).newInstance()方法来创建该Class对象对应类的实例。
然后用forName或者.class或者getClass()可以获得class对象
如eclipse中,一按点,编译工具就会自动的把该对象能够使用的所有的方法和属性全部都列出来,供用户进行选择。这就是利用了Java反射的原理。 -
数据库三范式
1)所有变量都是原子的 2)所有非主键必须依赖主键 3)不可以有传递依赖(比如C依赖B,B依赖主键A)
—————————————————————————————————————————————————百度三面——————————————————————————————————————————————
算法:
1.只出现1次且下标最小的元素,要求时间复杂度。
答:略。(我说的用一个Int[]存储这些字母出现的次数,或者用HashMap存储,然后遍历一次,第二次挨个判断。他说要求下次开头就取到,其实这样的话第一次复杂度就高了。)
2.给一个10000以内的数判断是不是素数,要求考虑到实际中的各种情况包括交互、效率、异常等
答:10000以内用筛法太破费,于是去挨个% <(根号n)的数。
不过他说实际上最好的办法是算出来之后,存起来,下次直接检索,查表法,是最快的。
3.100个球两个人轮流取,每次可以取1-5个,A先手,问怎么设计方案让A可以取到最后一个
答:略。很简单,先取4个。然后取(6-对手取的个数)个
4.链表反转:略
Java、Linux、数据库、设计模式:
5.Java8新特性
答:略,见搜狐北研面经--6.
6.equals和hashcode关系
答:略,见腾讯现场笔试--3. 他们的关系主要是用在集合类中,面试官也问到了这点。
7.(接上问,如果OOM)JVM调优(参数)
Java -Xmx3550m 设置Java最大堆大小为3550m
-Xmn2g 设置年轻代大小
还可以设置年轻:年老的比例,年老代大小,线程堆栈等等
8.(项目)正则表达式判断固定电话
0\d{2,3}-?\d{5,9} 不考虑(010)12345678这种
这里{i,j}代表重复次数>=i <=j。另外(aaa|bbb)可以匹配aaa或bbb
附:手机号验证:^1[358]\d{9}$
9.1乐观锁悲观锁
答:
1悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,
这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。
2乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,
但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号、时间戳等机制。
乐观锁适用于多读的应用类型,这样可以提高吞吐量,像数据库如果提供类似于write_condition机制的其实都是提供的乐观锁。
9.2数据库的索引
答:
数据库中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树。
数据库系统维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,实现高级查找算法。这种数据结构,就是索引。
比如把一列数据对应到一个二叉查找树中,每个节点有跟列中某项相同的值和指向此项的指针。
缺点:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。
优点:1.加快查询 2.如果在使用索引时使用UNIQUE关键字进行唯一性索引,可以保证每行数据的唯一性。
10.linux怎么看当前memory
答:top命令或者free -m命令。top更全,还有cpu占用,和进程占用啥的。
11.用grep查找带有某字符串的行
答:grep就是使用正则表达式进行搜索的工具。
注:grep不支持扩展正则表达式,也就不支持? + | {m,n}等。想用这些还是用egrep吧.
要用\d \D 要加-P
1)grep相关使用
比如grep -n -A3 -B2 'abcde' a* 就是输出文件名以a开头的txt中,含abcde的所有行,并带行号(-n),并把前2行和后3行也输出(-B2 -A3)
grep -v 'abcde' a b c 输出a,b,c三个文件中,不带abcde的行(-v)
grep 'abcde' a | grep '12345' 输出a文件中带abcde或12345的行
2)正则相关使用
grep -P '^\d+$' a 比如要只带数字的行
12.Java类中用到的设计模式
答:装饰者、观察者、factory、迭代模式(Iterator)、策略模式(Collections.sort())等。见http://www.importnew.com/12526.html
13.MVC的优点
答:解耦,Activity不过于臃肿,方便团队协作。
14.一个浏览器从输入URL到显示出来经过什么流程
答:略,见《各种笔试》--滴滴--第10题
Android:
15.介绍一下三种动画,还有动画的原理,以及怎么设置播放时间
答:Android 动画就是通过 ParentView 来不断调整 ChildView 的画布坐标系来实现的!
1)在 ParentView 的 dispatchDraw 中它发现 ChildView 有一个平移动画,而且当前的平移位置是 (100, 200),于是它通过调用画布的函数 traslate(100, 200)
来告诉 ChildView 在这个位置开始画,这就是动画的第一帧。
2)如果 ParentView 发现 ChildView 有动画,就会不断的调用 invalidate() 这个函数,就会不断的调用 dispatchDraw 这个函数
3)而属性动画逐帧更新都是由handler不断发生消息来实现的。
16.用过Android自带的工具看过Android内存占用啥的么
17.Android GC机制(略)
18.Android如何优化一个App的网络部分
答:本地缓存、根据不同网络不同设备返回不同图片大小、线程池、GZIP、JSON、Keep-alive、合并请求、SPDY
SPDY:在SSL层上增加一个SPDY会话层,以在一个TCP连接中实现并发流。
见:http://mp.weixin.qq.com/s?__biz=MzAxNjI3MDkzOQ==&mid=203692759&idx=1&sn=780965af241555b80c48eee982c501e6#rd
19.事件分发机制&View的绘制流程:略(Draw的时候先画背景->自己->孩子->滚动条)
*你的缺点是什么
*最近一个月看过什么书?(非计算机的也行,讲讲其中的一个故事)
网友评论