淘宝北京专场java面试题

2012年2月2日 没有评论

第一面

1、说说项目

由于我几年一直做一个产品,从后台做到前台,从业务开发做到技术平台,所以就画了整个产品部署架构图,b/s & c/s的,然后一层层的讲解。

B/S现有Web框架改造、浏览器缓存、c/s补丁下载各种方式、cdn、c/s通信协议、rpc集群、http集群、负载均衡、集群前置机调度、后端服务器主从实例、后端服务器各种优化(异步、性能隔离)、数据库服务器各种优化(索引、物化视图、读写分离、帐套结转、数据库横向切分、纵向切分)、层间调用性能监控的实现,对照产品架构图各个部分一路讲下来。

2、http集群方案,我们的是反向代理服务器,自己有写代理服务器,也可以用主流的web服务器,然后面试官就问ngnix、lighttpd、apache三大主流web服务器的区别…囧了。。。

3、如果有机会重新设计你们的产品,你会怎么做?

这个当时回答的不好,主要从通信协议和数据存储两块来说了,这样说有些片面。因为我们产品本身又很多问题,只通过部署架构图是反映不出来的,如二次开发问题、补丁下载问题、不同模块java包相互依赖问题、技术框架比较封闭、构建系统方案落后、文档缺失等,我们内部经历过很多的痛苦的,但是当时思维局限在了部署架构,所以没有说出这些问题。

第二面

4、网站性能优化如何优化的?

自己一点网站性能优化经历,结合《构建高性能Web站点》,扯了一通,跟一面有点类似。

5、本来要花产品架构图,我翻过简历,后边有一面时候画的,就没要画了。然后就要我在黑板(暂且叫做黑板)上画jvm体系结构。

画了jvm体系结构,讲解了jvm各个组件和组件的交互、GC算法、各种垃圾收集器、运行期优化、产品中遇到的与jvm相关的问题如oom、ClassLoader问题等,并针对HotSpot VM的实现讲解了堆、非堆内存划分

第三面(HR面)

6、看我面过b2b和支付宝,问了下情况

b2b面完了,但是没过;支付宝过了2面

7、个人优缺点

8、是否愿意来杭州

第四面(视频电话面,杭州某大牛)

9、介绍项目。对于Web框架的改造,跟原有框架的异同

10、下班后的时间有学习技术么

11、是否参加过开源项目

分类: 未分类 标签:

百度java开发面试题

2012年2月2日 没有评论

第一面

项目:

1、找一个项目,介绍下情况。其中遇到了什么问题,每种问题怎么样的解决方案。

算法题:

2、一个排好序的数组,找出两数之和为m的所有组合

3、自然数序列,找出任意连续之和等于n的所有子序列

数据结构:

4、从数据库查出一个数据结果集,其中有一个时间字段,请用一个数据结构存储使得可以最快速的查出某个时间段内的记录。

5、上一题我提到了B+树,他就继续问了为何用B+树实现索引而不用二叉树

数据库:

6、说说Oracle数据库的事务隔离级别,以及遇到的相关问题

这个我说了标准的四种级别,Oracle实现的三种级别,并概述了下多版本读一致性

项目相关技术:

7、看到简历上写了个rpc,讲讲,我说了跟rmi比较像,说了异同点,然后又展开到内存分配的问题,不过没搞懂他到底要说什么。还问题java客户端跟c程序服务端的通信情况,比如说c那边直接一个结构体过来,怎么处理,答曰没遇到过。

8、简历上写的jvm性能调优,说说都做了什么事情

9、说到jvm的时候,说到了我们用windows开发,就问linux的脚本知道么,awk用过么

10、简历上写web框架开发维护,就问浏览器端跟服务器端如何通信,不过最后只落到了java对象如何传递到客户端,客户端数据如何传递到服务端。

java基础:

11、并发同步的问题,synchorized是如何使用,Object的wait、notify方法什么作用

框架:

12、是否了解spring,ioc的实现,aop的实现方案,各种方案有什么限制

 

第二面

项目:

1、介绍下你做的项目,稍微高层次一些的介绍下,意思是不要没完没了的介绍

其中提到了主实例集群节点与主实例备用节点的单例状态如何保持同步

2、rpc通信和rmi区别

3、并发访问同一条数据的时候,如何保证数据同步。

4、网站性能优化都做了什么,具体的?ETag、Last-Modified、Expires、Cache-Control

5、最近看什么书,印象最深刻的是什么?

算法:

6、二叉树,找两个节点的最底层的公共父节点,给思路

7、单向链表反转,写代码

 

第三面(就记了这么多)

自我介绍:

1、个人基本情况,顺便提到项目,就开始扯了几下

数据库:

2、数据库性能优化有做么?做了些什么?

设计:

3、设计一个小商店进销存系统的的表结构设计,老板每天要知道卖出的货物,要定期查看货物的成本、销售额和利润。

这里要注意,重点之一是如何进行成本计算,要知道成本计算的几种方法,选其中一种实现,这个会影响表结构的设计

算法:

4、1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2、8、6,如1到11拆分后的数字之和 => 1 + … + 9 + 1 + 0 + 1 + 1。

 

(二)

  1. 有一个集合a,里面有n个正整数,乱序排列。给定一个正整数N,求,a中任意两个数相加等于N,共有哪些种组合情况。例如,集合为{1,3,44,2,4,5,54,222,368}  N=6,则结果集为{1,5},{2,4}

这个题网上有类似的

 

  1. Treemap的实现。

各种集合类的结构和优缺点,大家都挺爱考的。以前做行业信息化,没什么感觉,但是如果很在意性能,搞清楚还是挺有用的。

 

  1. 有两个很大的文件,每个文件中都有1亿行,每行一个整数。问这两个集合的交集是什么。给定的前提是机器内存不足以完全装入任意一个文件。

这个几乎是网上的原题了

 

  1. 堆和栈的定义,堆和栈里面的对象,哪个运行速度快。

还问了一些衍生的问题,记不清了,只要看清楚java教材关于这方面的介绍足矣

 

  1. 为了实现一个折线图,需要将数据存入一种数据结构,折线图横坐标是时间,纵坐标是值,经常的查询是按时间段进行查询,如select value from t where begin>’20110101’ and end<’20111212’ ,问,使用java中的那种数据结构比较好。

还是考java中的各种集合类,本质上是问各种数据结构在顺序/随机的读取/插入上的效率

 

  1. 数据库的索引通常用什么数据结构实现?为什么用这种数据结构。

就知道是btree,但是btree是咋回事,为啥不能用其他tree或者别的结构,这个看过一篇帖子以后才明白。算是学习了。

 

  1. 如果数据库中有2个表,表a字段为姓名、年龄,表b字段为姓名、单位。现在使用姓名字段做left join查询,假设姓名字段都有索引了。问数据库是怎么实现的。如果把这两个表看为在内存中的数组,要自己实现left join,怎么实现?

面试官看我实在不知道数据库里leftjoin怎么实现的,就让我自己实现一个内存中的,勉强答出来了吧,但是可能不太好。

 

  1. 数据库各种事务隔离级别

这个是纯不记得了,以前工作中从来用不到,真是汗颜。

 

  1. wait()方法和notify()方法干什么用的,wait()方法有什么使用限制,是哪儿都能用么?

对于一个从来不用多线程的人,这么简单的问题也变得有点儿难。只知道干什么用的,不知道有什么限制。

 

  1. 数据库中有一个表有上亿的数据量,怎么优化?(主要是拆分,除了按业务拆分外,还有什么从技术角度的,可扩展性好的水平拆分方式)

思路是拆没错,但是面试官问的不是业务拆分策略,而是从技术上考虑。还得考虑扩展性,比如拆好以后,数据量增长迅速,又要拆了,怎么办。这个水平拆分策略有好多,网上能搜到。但是我说的都不是很有体系,以前没弄过,都是现场想。。

 

分类: 未分类 标签:

jquery select 操作

2012年1月12日 没有评论

1. $(“#select_id”).change(function(){//code…});   //为Select添加事件

2. var checkText=$(“#select_id”).find(“option:selected”).text();  //获取Select选择的Text
3. var checkValue=$(“#select_id”).val();  //获取Select选择的Value
4. var checkIndex=$(“#select_id “).get(0).selectedIndex;  //获取Select选择的索引值
5. var maxIndex=$(“#select_id option:last”).attr(“index”);  //获取Select最大的索引值

————————————————————————————————————————————

1. $(“#select_id “).get(0).selectedIndex=1;  //设置Select索引值为1的项选中
2. $(“#select_id “).val(4);   //设置Select的Value值为4的项选中
3. $(“#select_id option[text='jQuery']“).attr(“selected”, true);   //设置Select的Text值为jQuery的项选中

————————————————————————————————————————————

1. $(“#select_id”).append(“<option value=’Value’>Text</option>”);  //为Select追加一个Option(下拉项)

2. $(“#select_id”).prepend(“<option value=’0′>请选择</option>”);  //为Select插入一个Option(第一个位置)
3. $(“#select_id option:last”).remove();  //删除Select中索引值最大Option(最后一个)
4. $(“#select_id option[index='0']“).remove();  //删除Select中索引值为0的Option(第一个)
5. $(“#select_id option[value='3']“).remove();  //删除Select中Value=’3′的Option
5. $(“#select_id option[text='4']“).remove();  //删除Select中Text=’4′的Option

分类: 未分类 标签:

struts s:set

2011年12月17日 没有评论

<s:set value=”"  name=”"/>

value是要设置的变量的值

name是变量名

设置字符串时注意加引号

<s:set value=” ‘ hello world ‘ ” name=”ss”/>

引用变量

${ss}或<s:property value=”ss”/>

分类: 未分类 标签:

java脚本引擎

2011年12月6日 没有评论

mvel

分类: 未分类 标签:

linux常用命令

2011年11月29日 没有评论

1、 查看端口:   $netstat -tln

2、查看所有的服务端口(LISTEN,ESTABLISHED)
#netstat -ap

3、查看占用端口的进程号

$netstat -lnp

例:查看占用8088端口的进程

$ netstat -lnp|grep 8088
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 :::8088                     :::*                        LISTEN      6441/java
查到6441的进程在占用端口,再ps下就可以知道具体进程了
$ps -ef|grep 6441
分类: 未分类 标签:

异常捕获不到

2011年11月15日 没有评论

原来是被底层代码吞了,悲剧,还是省不得debug啊

分类: 未分类 标签:

java ResourceBundle找不到文件

2011年11月15日 没有评论

linux环境下

java -classpath $CLASSPATH -Djava.ext.dirs=$LIB  XXXX.class

可以找到类 但使用ResourceBundle找不到类路径下的文件,做个记号 晚上测试

 

 

 

分类: 未分类 标签:

java gc

2011年11月13日 没有评论
java启动gc监控并设置gc日志的参数
-verbose:gc
-Xloggc:gc.log
tomcat查看gc日志,修改catalina.bat(linugx catalina.sh)
设置
CATALINA_OPTS="-Xms4m -Xmx8m -Xloggc:gc.log -XX:NewRatio=2 -XX:+UseParallelOldGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps"

参考:
http://blog.csdn.net/jimmy1980/article/details/4968308
http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html
http://www.javaperformancetuning.com/tools/hpjtune/index.shtml

			
分类: 未分类 标签:

SQLyog显示乱码

2011年11月12日 没有评论

http://webzixue.iteye.com/blog/475736

1.在SQLyog下输入下面代码,全部执行

SET character_set_client = utf8;
SET character_set_results = gb2312;
SET character_set_connection = utf8;

如果上边的不行,还可以改成Gbk。总以根据你的数据的文字编码改成相应的编码类型就ok了。给出Gbk的代码:

SET character_set_client = gbK;
SET character_set_results = gbK;
SET character_set_connection = utf8;

但是重启SQL之后又不行了。

2.Tools->Preference Base->Editor 修改Fonts
修改完成后,重新启动SQLyog就好了!

按找第一种方式问题解决,第二种可能版本不一样,没找到选项。

但心里还是疑惑,程序是utf-8,mysql存储是utf-8,sqlyog连接时也设置的utf-8,为何显示就是乱码呢,而且程序存储并读出是没有乱码的,也就是说ysql本身存储确实是utf8没有悬念的,只是从客户端到显示转码出的问题,

猜想是因为windows平台编码是gbk显示的,所以最终显示必须用gbk编码,gb2312和gbk大部分兼容,所以

SET character_set_results = gb2312;

也解决了问题

分类: 未分类 标签: