淘宝JAVA笔试.doc_第1页
淘宝JAVA笔试.doc_第2页
淘宝JAVA笔试.doc_第3页
淘宝JAVA笔试.doc_第4页
淘宝JAVA笔试.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在进入我的淘宝页面时,此页面需要获取登录用户的相关信息,在访问量少的情况下,可以采用直接访问数据库的方式,但当访问量太高时,会导致数据库压力过 高,因此通常采取的方法为将用户信息进行缓存,在用户数不多的情况下,这个方案还是提供了很多的帮助的,但用户数增多了一点后,出现的问题是缓存占了太多 的内存,而经分析,原因是这些缓存中很多是不访问的用户信息。1.1请写一端存储用户信息的缓存实现代码,并实现当缓存到达一定大小后,如继续新增用户信息,则将最近不访问的用户信息从缓存中踢出;1.2由于我的淘宝是部署在多台机器上的,如用户每次访问不同的机器,以上方案会造成每台机器都需要去数据库中加载此用户信息,请给出一个方案来避免此问题。第一个用个map啥的存一下,存个最后一次登录时间。按时间排个序,把最后的删了这个是实习生的笔试题、 无语 第一个是缓存的问题 缓存很很多种方式 并还有其相应的算法 说白了就是缓存的方式 LZ 说的应该是我们大学算法中 最近未访问吧,大概是这样 是缓存的一种方法配置 第二个 是分布式的问题吧 不同地方的用户访问不同地方的服务器 也就是说在北京的用户访问此站点时访问的是北京的数据库;类似这的。、1.1 应该是一个调度算法。1.2 难道是session拷贝?我觉得引入memcache应该可以解决吧,既支持删除很久没用过的session,还支持分布式。public class SessionBuffer private Map buffer = new HashMap(); private int limit = 11; public Object get(Object key) SMap smap = buffer.get(key); smap.setLastUpdate(new Date(); return smap.getData(); public boolean put(Object key, Object data) if(buffer.size()this.limit) buffer.put(key,new SMap(data); return true; return false; public int getLimit()return this.limit; public void setLimit(int limit)this.limit = limit;class SMap private Object data; private Date lastUpdate; public SMap(Object data) this.data = data; this.lastUpdate = new Date(); public Object getData()/do something this.lastUpdate = new Date(); return this.data; public Date getLastUpdate()/do something return this.lastUpdate; /Setter method第二个告诉他所有服务器都使用NetBeans 获取同一服务器的缓存内容。1java web笔试 收藏 1Hibernate工作原理及为什么要用?原理:1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory3.打开Sesssion4.创建事务Transation5.持久化操作6.提交事务7.关闭Session8.关闭SesstionFactory为什么要用:1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2Hibernate是如何延迟加载?1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。3Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都是对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、4说下Hibernate的缓存机制1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存2. 二级缓存:a) 应用及缓存b) 分布式缓存条件:数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系统频繁使用、非 关键数据c) 第三方缓存的实现5Hibernate的查询方式Sql、Criteria,object comptositionHql:1、 属性查询2、 参数查询、命名参数查询3、 关联查询4、 分页查询5、 统计函数6如何优化Hibernate?1.使用双向一对多关联,不使用单向一对多2.灵活使用单向一对多关联3.不用一对一,用多对一取代4.配置对象缓存,不使用集合缓存5.一对多集合使用Bag,多对多集合使用Set6. 继承类使用显式多态7. 表字段要少,表关联不要怕多,有二级缓存撑腰7Struts工作机制?为什么要使用Struts?工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config.xml文件中读取配置信息,把它们存放到各种配置对象当ActionServlet接收到一个客户请求时,将执行如下流程.-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息;-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中;-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法;-(4)如果ActionForm的validate()方法返回或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功;-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法;-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件;-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户;为什么要用:JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件8Struts的validate框架是如何验证的?在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。9说下Struts的设计模式MVC 模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数 据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用 Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对 象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动 态的网页,返回给客户。10spring工作机制及为什么要用?1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.3.DispatcherServlet请请求提交到目标Controller4.Controller进行业务逻辑处理后,会返回一个ModelAndView5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象6.视图对象负责渲染返回给客户端。为什么用:AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的,IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straight construction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。Spring即使一个AOP框架,也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。=华丽的分割线,可以飘过哦=1. HttpSession session = request.getSession()与HttpSession session = request.getSession(true)的区别?参考答案:getSession(true)的函数原型为::HttpSession session = request.getSession (Boolean create)如果有与当前的request先关联的HttpSession,那么返回request相关联的HttpSession,如果还没有,那么:java 代码与当前如果create=true, 那么返回一个新建的HttpSession,如果create=false, 那么返回null.2. getParameter与 getAttribute的区别?参考答案:Attribute是指属性。Parameter是指参数,由URL传入或由FORM提交的内容3.以下哪一个不是赋值符号?A. += B. = C. =参考答案:A.很明显是赋值符号B.= 右移赋值,左边空出的位以0填充4.以下哪个不是Collection的子接口?A. List B. Set C. SortedSet D. Map参考答案:D5.BufferedReader的父类是以下哪个?A. FilterReader B. InputStreamReader C. PipedReader D. Reader参考答案:D6.子类继承父类BA a = new A();则 父类B构造函数、父类B静态代码块、父类非静态代码块、子类构造函数、子类A静态代码块、子类非静态代码块 执行的先后顺序是?参考答案:父类静态代码块-子类静态代码块-父类构造函数-父类非静态代码块-子类构造函数-子类非静态代码块2 JAVA WEB面试笔试题 2010年06月22日 星期二 23:471. jsp有哪些内置对象?作用分别是什么?一共有9个内置对象pageContext javax.servlet.jsp.PageContextrequest javax.servlet.http.HttpServletRequestresponse javax.servlet.http.HttpServletResponsesession javax.servlet.http.HttpSessionapplication javax.servlet.ServletContext this.getServletContext()config javax.serlvet.ServletConfigexception java.lang.Throwablepage java.lang.Objectout javax.servlet.jsp.JspWriter作用:1、pageContext 表示页容器 EL表达式、 标签 、上传2、request 服务器端取得客户端的信息:头信息 、Cookie 、请求参数 ,最大用处在MVC设计模式上3、response 服务器端回应客户端信息:Cookie、重定向4、session 表示每一个用户,用于登录验证上5、application 表示整个服务器6、config 取得初始化参数,初始化参数在web.xml文件中配置7、exception 表示的是错误页的处理操作8、page 如同this一样,代表整个jsp页面自身9、out 输出 ,但是尽量使用表达式输出2. jsp有哪些动作?作用分别是什么? jsp共有以下6中基本动作 :在页面被请求的时候包含一个文件 :寻找或者实例化一个javaBean :设置javaBean的属性,通过反射调用方法 :取得某个javaBean的属性 :把请求转到一个新的页面 :插入Applet程序的代码:用于传参数,和forward一起使用3. jsp 中动态INCLUDE和静态INCLUDE 的区别?动态INCLUDE 用动作实现: 如果包含的是动态页,则先编译之后再进行处理,它总是会检查所包含文件中的变化,并且可以带参数 静态INCLUDE用伪码实现: 直接将内容先包含后处理,它不会检查所包含的文件的变化,适用于包含静态页面4. 两种跳转方式分别是什么?有什么区别?客户端跳转:跳转之后地址栏不改变,执行完页面后不会转向还会回来,相当于函数调用,并且可以传递request属性,实际上是对RequestDispatcher接口的封装服务器端跳转:response.sendRedirect(),跳转之后地址栏改变,完全转向新的页面,不会再回来,相当于go to 语句。5. 请总结一下WEB开发中的会话跟踪实现1、 Session也是最常用的一种2、 Cookie3、 地址重写4、 隐藏域6. 在Web开发中需要处理HTML标记时,应做什么样的处理,要筛选哪些字符( & “ 空格 乘号 除号 .)因为以上的标记都属于HTML范畴的内容,所以必须进行转义操作显示效果符号说明 实体名表示 实体编号表示 空格符   大于号 > & 符号& “ 双引号" C 版权符号 © &169;R 注册商标 ® 乘号 × 除号 ÷ 单引号 ´7. 说明Jsp中errorPage的作用域,应用范围表示错误页的操作,在一般的站点中,只要一个程序出现了错误,就是产生了异常,则可以统一跳转到一个页面上进行显示,那么这种操作就属于错误页的处理,但是简单的错误页基本上都是在Jsp的开发中使用的。要想进行错误页的设置,需要满足以下两个条件:1. 在错误能够处理的页上的page指令中,增加:isErrorPage=”true”,表示可以处理错误2. 在每一个页面指定errorPage,执行isErrorPage为true的页面。如果现在希望能够配置一种全局的错误处理的话,则可以在Web.xml文件中进行配置404/errors.jsp java.lang.NullPointerException /errors.jsp一旦出现错误之后,会自动跳转到指定的页面,但是这样的跳转,永远都是属于服务器端跳转8. 写一段JDBC连接Oracle的程序,并实现数据查询。package com.jdbc;/import java.sql.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class TestJdbc public static void main(String args) String url = jdbc:oracle:thin:localhost:1521:orcl; String username = lanlan; /scott String password = 123456; /tiger String sql = select * from users t; try Class.forName(oracle.jdbc.driver.OracleDriver); Connection conn = DriverManager.getConnection(url, username, password); / PreparedStatement pstmt = conn.prepareStatement(sql); / ResultSet rs = pstmt.executeQuery(); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql);while (rs.next() System.out.println(rs.getInt(id); System.out.println(rs.getString(username); System.out.println(rs.getString(password); rs.close(); stmt.close(); / pstmt.close(); conn.close(); catch (ClassNotFoundException e) e.printStackTrace(); catch (SQLException e) e.printStackTrace(); 9. Class.forName 的作用?为什么要用?Class.forName(xxx.xx.xx) 返回的是一个类Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段10. 简述在JSP中是如何实现分页操作的?分页有两种情况:真分页:性能高,是基于数据库的操作,只是从数据库中取出部分的数据进行显示,所以性能高,但是可移植性低假分页:性能低,是将全部的结果查询出来,之后依靠算法分页,只显示部分数据,因为使用了通用的语法,所以可移植性高真分页实现原理:1.定义一系列的变量:currentPage(当前页) showResultNumber(每页显示记录数),并通过查询求出countResultNumber(总记录数)求出countPage(总页数)|- countPage=(countResultNumber-1)/showResultNumber+12.然后根据currentPage 和 showResultNumber到数据库中查询数据|- Oracle中用rownumber MySql中用limit()3.然后在表单中不断地修改currentPage和showResutlNumber就可以实现分页11. 介绍在JSP中如何使用javaBeans1. javaBean的格式要求:必须有包、public calss 声明、属性封装、无参的构造函数、setter() 和getter()方法2. jsp中导入javaBean:使用import导入 如:使用 导入如:12. 说一说什么是Servlet 和Servlet的生命周期?什么是Servlet: Servlet是用Java编写的服务端程序,它与协议和平台无关。Servlet运行于Javaenabled Web Server中。Servlet可以动态地扩展Server的能力,并采用 请求响应 模式提供Web服务。 Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程为: 1.客户端发送请求至服务器端; 2.服务器将请求信息发送至Servlet 3.Servlet生成响应内容并将其传给Server。响应内容动态生成,通常取决于客户端的请求 4.服务器将响应返回给客户端Servlet的生命周期:加载 初始化:(由应用服务器Tomcat创建)正常一次,对应 init()方法,有两个 init()方法,其中一个是具有ServletConfig对象,此方法存在则无参不调用,Servlet对象是由应用服务器在第一次使用的时候创建, 一个Servlet只有一个Servlet对象存在。也可以通过在web.xml文件中配置在容器启动的 时候自动进行初始化操作 服务:服务多次,所有的服务都由service()方法分配,包括 doPost() 和doGet(),分别处理post和get 请求销毁:正常一次,调用destroy()方法,当重新加载或者关闭应用服务器的时候应用服务器会销毁Servlet对象,如果一个Servlet长时间不使用,也会自动销毁,而当再次使用的时候就必须重新进行初始化的操作卸载13. Servlet中forward()与sendRedirect()的区别?forward()方法是RequestDispatcher接口定义的,而sendRedirect()是response定义的,sendRedirect()是服务器端的跳转,forward()是客户端的跳转14. MVC的各个部分都有哪些技术来实现?如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论