您的位置:首页 > 职场人生

Java面试总结1

2015-09-02 13:55 525 查看
1.订单表order里面有两个字段,order_id和user_id,写一个sql查询一下过了3个以上的用户。
SELECT count(user_id) as result ,user_idfrom order_table  group by user_idhaving count(user_id) > 3 
2.后台系统A用户个B用户同时修改一篇新闻,A用户提交修改内容,更新数据库数据,过几分钟后,B用户提交修改后的内容,会覆盖A用户修改的内容,请问怎么避免A用户修改的内容被不被B用户覆盖。
加锁,或者触发器
3.WEB前端优化和提高性能的方案。
HTML部分

语义化HTML:好处在于可以使代码简洁清晰,支持不同设备,利于搜索引擎,便于团队开发;
减少DOM节点:加速页面渲染;
给图片加上正确的宽高值:这可以减少页面重绘,同时防止图片缩放;
防止src属性和link的href属性为空:当值为空时,浏览器很可能会把当前页面当成其属性值加载;
正确的闭合标签:如避免使用<div/>,浏览器会多一个将它解析成<div\></div\>的过程;
链接为目录或首页的地址后面加”/”,如http://www.asheep.cn/;
用LINK而不用@import方式导入样式;
样式放在页头,JS放在页尾;
缩小favicon.ico并缓存;
CSS部分

避免使用 CSS Expressions(CSS表达式):如background-color: expression( (new Date()).getHours()%2 ? “#B8D4FF” : “#F08A00″ ) ;
避免使用 CSS Filter(CSS滤镜);
使用CSS缩写,减少代码量;
通过CSSSprites把同类图片合成一张,减少图片请求;
减少查询层级:如.header .logo要好过.header .top .logo;
减少查询范围:如.header>li要好过.header li;
避免TAG标签与CLASS或ID并存:如a.top、button#submit;
删除重复的CSS;
Javscript部分

尽量少用全局变量;
使用事件代理绑定事件,如将事件绑定在body上进行代理;
避免频繁操作DOM节点;
不使用EVAL;
减少对象查找,如a.b.c.d这种查找方式非常耗性能,尽可能把它定义在变量里;
类型转换:把数字转换成字符串使用”” + 1,浮点数转换成整型使用Math.floor()或者Math.round();
对字符串进行循环操作,譬如替换、查找,应使用正则表达式;
删除重复的JS;
服务器部分

尽量合并CSS、JS文件,或将其直接写在页面上,减少HTTP请求;
压缩CSS、JS文件,缩短文件传输时间;
避免404错误:特别要避免给404指定一个停摆页面,否则所有404错误都将会加载一次页面;
一般要求减少DNS查询次数,如同一个页面的请求资源尽量少的使用不同的主机名,这可以减少网站并行下载的数量,但很多网站为了加速下载资源其实是特意用了多个主机名,这里要做一个权衡;
使用CDN加速,使用户从离自己最近的服务器下载文件;
减少Cookie的大小,使用无cookie的域,客户端请求静态文件的时候,减少 Cookie 的反复传输对主域名的影响;
为文件头指定Expires,使内容具有缓存性;
使用gzip压缩内容;
这些看似基础的前端优化技巧,其实也是最重要的,在我们平时开发工作中,能够运用这些前端优化那么你的项目会有质的提升。
4.简要描述你目前所在公司服务器平台的搭建拓扑结构图;如何用Nginx,Apache,Tomcat,Resion,MySql,MongoDB,Hadoop.



5.简要说明一下你对webservice的理解,列举常用的webservice框架,并说明他们的区别,对类似的框架,比如restful,他的方式和webservice有何不同。
Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。[1] 
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。
现在流行webservice框架主要是Apache Axis2和Apache CXF。
Apache CXF是Codehaus XFire 的第二代产品,目前在不同框架中性能最佳,应该是开发者不错的选择,这与它本身的架构设计不无关系。相比其他框架,CXF具有几个突出的特性:支持JAX-WS、Spring集成、Aegi数据绑定、支持RESTful services、支持WS-*、Apache协议、代码实现简洁。Apache Axis2是Apache Axis1的第二代产品,架构上也非常不错,关键特性:支持各种规范、可插拔模块化设计、支持热部署等。与CXF相比性能也非常优异。
6.列举三种计算字符串相似度的方法。
一直不理解,为什么要计算两个字符串的相似度呢。终于找到了比较全面的答案和为什么要计算字符串相似度的解释。因为搜索引擎要把通过爬虫抓取的页面给记录下来,那么除了通过记录url是否被访问过之外,还可以这样,比较两个页面的相似度,因为不同的url中可能记录着相同的内容,这样,就不必再次记录到搜索引擎的存储空间中去了。还有,大家毕业的时候都写过论文吧,我们论文的查重系统相信也会采用计算两个字符串相似度这个概念。
7.什么是设计模式,你在编码的过程中用到了哪些设计模式。
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。
设计模式分为三种类型,共23种。
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
8.SQL语句优化需要考虑那几点;
1)不要有超过5个以上的表连接(JOIN)
2)考虑使用临时表或表变量存放中间结果。
3)少用子查询
4)视图嵌套不要过深,一般视图嵌套不要超过2个为宜。
5)限制结果集
6)合理的表设计
7)建立合适的索引
like,in,<>,!=等慎用
程序题:
9.目前一些系统大量用了BTREE,请写出BTREE的节点定义结构,并说明他的时间复杂度由哪些因子决定。
B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构。使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度。按照翻译,B 通常认为是Balance的简称。这个数据结构一般用于数据库的索引,综合效率较高。
B-tree中,每个结点包含:
1、本结点所含关键字的个数;
2、指向父结点的指针;
3、关键字;
4、指向子结点的指针;
对于一棵m阶B-tree,每个结点至多可以拥有m个子结点。各结点的关键字和可以拥有的子结点数都有限制,规定m阶B-tree中,根结点至少有2个子结点,除非根结点为叶子节点,相应的,根结点中关键字的个数为1~m-1;非根结点至少有[m/2]([],向上取整)个子结点,相应的,关键字个数为[m/2]-1~m-1。
10.“hi,hello world!”,把该字符串按单词倒叙输出,输出为“!world hello,hi”(算法)
String c = "hi,hello world !";
        String[] f = c.split("\\s+|[,]");
        String g="";
        for(int i = f.length -1;i > -1; i--){
            g += f[i] + " ";
        }
        System.out.println(g);
11.抽奖,0~9999之间数字,每个用户随机抽出不能重复的数字。(算法)如果是服务器集群应该如何考虑。
监听,锁。。。
12.下图问号处应该填写什么,写出推算逻辑。推出来91,不知是否正确。



13.写一下你最熟悉的技术。
还有两道AJAX和JS的问题,忘记了。
常用的js框架:
(1)目前最常用的是Jquery,这是一个轻量级的核心框架
Jquery很容易扩展,常见的又jquery ui 和jquery esayui
ExtJs,一个重量级js框架,使用的较多
Dojo,一个类似Extjs的框架,和JSF结合很完美
(2)Ajax
AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。
AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。
AJAX 是一种用于创建快速动态网页的技术。

Ajax核心对象 XMLHTTPRequest
建立XMLHTTPRequest对象 一是IE6 及以下版本,需要通过某一个正确的ActiveXObject控件的名称通过new ActiveXObject(控件名)的方式
  二是IE7 及以上版本,firefox,chrome等非IE浏览器,直接new XMLHttpRequest()
注册回调函数 http.onreadystatechange = callback;  
使用open方法设置和服务器端交互的基本信息
设置发送的数据,开始和服务器端交互
在回调函数中判断交互是否结束,响应是否正确,并根据需要获取服务器端返回的数据,更新页面内容

面试:
1.ehcache ,memcache, redis区别;
2.maven有用过没,为什么要用;
1.  对第三方依赖库进行统一的版本管理。
  只要用了Maven2就不用再为每个项目复制spring.jar和hibernate.jar了,Maven2会在你需要的时候,自动把这些第三方依赖库找到,你需要编译,Maven2就把这些jar包放到classpath里,你需要打包,Maven2就帮你把需要的jar包都复制到WEB- INF/lib/目录下。
2.  统一项目的目录结构。
  可以保证所有项目的目录结构都是一样的,目录结构统一的好处就是,你要找源代码就去src/main/java/下,你要找需要放到classpath下的资源,就去src/main/resources/下,你要找单元测试对应的代码和资源,就去src/test/下。每个目录下放什么东西,程序编译,发布的时候,每个目录起什么作用都很清楚明了,不会出现打开项目找不到要找的文件的情况。
3.  统一软件构建阶段
  Maven2把软件开发的过程划分成了几个经典阶段,比如你先要生成一些java代码,再把这些代码复制到特定位置,然后编译代码,复制需要放到 classpath下的资源,再进行单元测试,单元测试都通过了才能进行打包,发布。
  以前使用Ant,最令人头疼的就是要为不同的项目写很多build.xml脚本,而且这些脚本还不太通用,现在我们可以使用Maven2提供的这些经典构建阶段,让每个项目就经过相同的步骤,从源代码一步一步变成可以部署的成品。如果想要什么附加功能,把对应的插件绑定到一个构建阶段上,那么到了执行这个构建阶段的时候,就会执行绑定的插件了。
4.  支持多种插件
  在http://maven.apache.com/和http://mojo.codehaus.org/上可以找到大量的Maven2插件,通过这些插件可以完成多种多样的扩展功能。
  不过,如果比插件的易用性,Ant的插件实际上更简单方便,与之相比,在Maven2中配置插件的步骤太复杂了,既要配置groupId和 artifactId,还要配置绑定在哪个阶段运行。
  不过因为Maven2可以把插件连同第三方依赖一起进行统一版本管理,所以这方面也算比Ant有一点儿优势,至少使用时不需要自己再去下载插件的发布包了。
3.有用过非关系型数据库没,关系数据库中索引用过没。。。;
4.设计模式相关。。;
5.webservice相关;
6.正则表达式;
7.AOP是怎么实现的,有那些方法;
AOP的两种实现方式 
AOP,面向切面编程,可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。  
  Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
  有两种方式可以实现aop,一种是根据利用jdk自带的proxy,另外一种是利用cglib的proxy.
一 jdk代理。JDK的动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler。其中 InvocationHandler是一个接口,可以通过实现该接口定义横切逻辑,在并通过反射机制调用目标类的代码,动态将横切逻辑和业务逻辑编织在一起。
return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this)
二 利用cglib代理实现aop
CGlib是一个强大的,高性能,高质量的Code生成类库。它可以在运行期扩展Java类与实现Java接口。 CGLIB是针对类实现代理的,主要对指定的类生成一个子类,并覆盖其中的方法, 因为是继承,所以不能使用final来修饰类或方法。和jdk代理实现不同的是,cglib不要求类实现接口。
Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(this.targetObject.getClass());
        //设置回调函数
        enhancer.setCallback(this);
        return enhancer.create();
8.线程相关的问题;
9.NGINX是怎么实现负载均衡的;
访问同一页面 的负载均衡: 
     即用户访问http://localhost:8080/test.php 这个同一页面的时候,我们实现两台服务器的负载均衡 (实际情况中,这两个服务器上的数据要求同步一致,这里我们分别定义了打印server1和server2是为了进行辨认区别)。 
a.   现在我们的情况是在windows下nginx是localhost侦听8080端口; 
两台apache,一台是127.0.0.1:80(包含test.php页面但是打印server1),另一台是虚拟机的158.37.70.143:80(包含test.php页面但是打印server2)。 
b.   因此重新配置nginx.conf为: 
      首先在nginx的配置文件nginx.conf的http模块中添加,服务器集群server cluster(我们这里是两台)的定义: 
复制代码 代码如下:
upstream myCluster { 
server 127.0.0.1:80 ; 
server 158.37.70.143:80 ; 
} 
表示这个server cluster包含2台服务器 
〉然后在server模块中定义,负载均衡: 
复制代码 代码如下:
location ~ \.php$ { 
proxy_pass http://myCluster ; #这里的名字和上面的cluster的名字相同 
proxy_ www.gzlij.comredirect off; 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
} 
这样的话,如果访问http://localhost:8080/test.php 页面的话,nginx目录下根本没有该文件,但是它会自动将其pass到myCluster定义的服务区机群中,分别由127.0.0.1:80;或者158.37.70.143:80;来做处理。 
上面在定义upstream的时候每个server之后没有定义权重,表示两者均衡;如果希望某个更多响应的话例如:
复制代码 代码如下:
upstream myCluster { 
server 127.0.0.1:80 weight=5; 
server 158.37.70.143:80 ; 
} 
       综上,我们使用nginx的反向代理服务器reverse proxy server的功能,将其布置到多台apache server的前端。
      nginx仅仅用来处理静态页面响应和动态请求的代理pass,后台的apache server作为app server来对前台pass过来的动态页面进行处理并返回给nginx。 
通过以上的架构,我们可以实现nginx和多台apache构成的机群cluster的负载均衡。 
两种均衡: 
1)可以在nginx中定义访问不同的内容,代理到不同的后台server; 如上例子中的访问phpMyAdmin目录代理到第一台server上;访问test.php代理到第二台server上; 
2)可以在nginx中定义访问同一页面,均衡 (当然如果服务器性能不同可以定义权重来均衡)地代理到不同的后台server上。 如上的例子访问test.php页面,会均衡地代理到server1或者server2上。 
实际应用中,server1和server2上分别保留相同的app程序和数据,需要考虑两者的数据同步。
10.常用的Linux的命令,查找某词出现了几处,在那出现;
grep -c 
12.junit测试用的是3还是4,有什么区别,before,after。。;
13.非关系数据库;
。。。聊了一个多小时,问题太多忘了哈~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: