2018/5/10模拟面试题

1.为什么需要分层模式?分层开发的优势有哪些?
1.方便团队分工
2.其他特点
还有以下的一些特点:
规范代码:在开发过程中可以将每层的代码进行规范,固定开发语言的风格;
忽略数据库差异:好的数据访问层可以将数据库的差异完全屏蔽,对开发人员只是做相同的数据操作工作,甚至可以快速进行数据库转换;




2.请描述下jsp,html之间的关系?
1、HTML能直接通过浏览器打开,而JSP只能发布到Tomcat服务器才能打开;
2、HTML中不能嵌套Java代码,而JSP中可以嵌套Java代码;
3、HTML是静态页面可以直接运行,而JSP页面运行时需要转换成servlet。




3.在一个jsp的请求处理中如何停止jsp的执行。
<%
if (request.getParameter(“wen”) != null) {
// do something
} else {
return;
}
%>




4.为什么使用连接池?说出数据连接池的机制是什么。
1资源重用  2更快的系统响应速度  3新的资源分配手段  4统一的连接管理,避免数据库连接泄漏


最大维持连接数:没有任何请求时在连接池中可以存在的连接数
最大连接数:连接池中最多可以存在的连接个数。
最大等待时间:当断开连接时,超过最大维持连接数的连接不会马上销毁,最大等待时间过后它才会销毁。
连接池是将已经创建好的连接保存在池中,当有请求来时,直接使用已经创建好的连接对数据库进行访问。这样省略了创建连接和销毁连接的过程。




5.请描述分页显示的SQL语句如何实现?
方法1:
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id NOT IN
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
)
ORDER BY id
方法2:
适用于 SQL Server 2000/2005
SELECT TOP 页大小 *
FROM table1
WHERE id >
(
SELECT ISNULL(MAX(id),0)
FROM
(
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
) A
)
ORDER BY id
方法3:
适用于 SQL Server 2005
SELECT TOP 页大小 *
FROM
(
SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM table1
) A
WHERE RowNumber > 页大小*(页数-1)




6.请描述什么是jsp内置对象?列举你知道的jsp内置对象并说明其作用?
jsp内置对象 
  定义:可以不加声明就在JSP页面脚本(Java程序片和Java表达式)中使用的成员变量   JSP共有以下9种基本内置组件(可与ASP的6种内部组件相对应):   内置对象 代表内容 范围 


request  触发服务调用的请求  request  
response  对请求的应答  page  
session  为请求的客户创建的session对象  session  
application  从 servlet 配置对象获得的 servlet 上下文(如在getServletConfig() ,getContext()的调用中)  application  
out  向输出流写入内容的对象  page  
pageContext  本 JSP 的页面上下文  page  
page  实现处理本页当前请求的类的实例  page  
config  本 JSP 的 ServletConfig  page  
exception 表示JSP页面运行时产生的异常 Page




7.请简要描述实现页面访问控制的流程?
1、概念和定义
session对象:
        session对象用来存储有关用户会话的所有信息,一个会话就是浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程。session是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息。
application对象:
        application类似于系统的“全局变量”,用于实现用户之间的数据共享。
2、流程和步骤
实现网站登录功能的步骤
(1)创建静态登录页面,并指定表单提交由登录处理页面进行处理。
(2)创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,在session中保存该用户的登录信息,并且跳转到新闻发布系统的首页面,如果用户未注册,则仍然回到登录页面。
(3)创建登录验证处理页面从session中提取该用户信息再次验证用户信息是否存在,如果存在则显示首页内容,不存在则定位到登录页面。
(4)创建新闻发布系统首页面,调用登录验证处理代码,并显示首页面内容。
        需求:        
        升级新闻发布系统,提供用户登录页面,增加访问控制功能,要求用户必须登录之后,才能访问新闻发布系统。
        关键代码:        
        1、在news数据库中创建表userinfo,负责存储用户名、密码,创建类(User.java),负责存储用户名、密码。
        2、创建用户登录静态login.html页面
        <form method="POST" name="form1" action="login.jsp">
        3、创建登录处理页面login.jsp
        <%
            // 获得登录信息
                request.setCharacterEncoding("GBK");
                String pass = request.getParameter("password");
                String name = request.getParameter("loginName");                
                Connection con = null;
                PreparedStatement pStatement = null;
                try{
                // 查询数据库,判断该用户是否注册
                        con = ConnectionManager.getConnection();
                        String sql = "select * from userinfo where loginname = ? and password=?";
                        pStatement = con.prepareStatement(sql);
                        pStatement.setString(1, name);
                        pStatement.setString(2,pass);        
                        ResultSet rs = pStatement.executeQuery();
                        // 如果是已注册用户
                        if (rs.next()) { 
                                // 把用户名、密码封装在User对象中
                                User loginedUser = new User(name, pass);
                                // 在session中存放用户登录信息
                                session.setAttribute("LOGINED_USER", loginedUser); 
                                // 进入新闻发布系统的首页面
                                response.sendRedirect("index.jsp");
                        } else {
                    // 如果不是已注册用户,仍然回到登录页面
                                response.sendRedirect("login.html");
                        }
                }catch(Exception e){
                        out.println("发生错误!错误原因:"+e.getMessage());
                }finally{
                        ConnectionManager.closeStatement(pStatement);
                        ConnectionManager.closeConnection(con);
                }
        %>
        4、创建登录验证处理页面checklogin.jsp
        <%
                User user = (User) session.getAttribute("LOGINED_USER");
                if (user == null) {
                        response.sendRedirect("login.html");
                }
        %>
        5、创建新闻发布系统首页面index.jsp
        <%@ include file="checklogin.jsp"%>
实现网站登出功能的步骤
(1)在新闻发布系统首页面中添加[安全退出]链接
(2)创建网站登出处理页面,把当前会话置为无效,返回新闻发布系统首页面
(3)在[安全退出]链接中调用网站登出处理程序
        需求:        
        实现新闻发布系统当前用户安全退出功能。
        关键代码:        
        在新闻发布系统首页面中添加[安全退出]链接。
        [<a target="_parent" href="adminOut.jsp"><font color="#FFFFFF">安全退出</font>        </a>]
        创建网站登出处理页面adminOut.jsp。
        <%
          session.invalidate();
          response.sendRedirect("../index.jsp");
        %>
实现网站访问人数统计功能的步骤
(1)创建静态登录页面,并指定表单提交由登录处理页面进行处理。
(2)创建登录处理页面获得登录信息,查询数据库,判断该用户是否注册,如果该用户已注册,把已登录用户的信息保存在一个全局范围内。
(3)在新闻发布系统左导航栏中加入超链接,用来导航到右侧的已访问人数统计页面。
(4)创建已访问人数统计页面,从全局范围内取出访问者个数并显示。
        需求:        
        如下图示为新闻发布系统增加已访问人数统计功能。
        关键代码:        
        1、创建静态登录页面login2.html
        <form method="POST" name="form1" action="login2.jsp">
        2、创建登录处理页面login2.jsp,把已登录用户的信息保存在一个全局范围内
        if (rs.next()) {
        User logineduser = new User(name, pass);
        session.setAttribute("LOGINED_USER", logineduser);
        List loginedUsers = new ArrayList();  //访问者列表
        if (application.getAttribute("LOGINED_USER") != null) {
        // 从全局范围内取出原有的访问者列表
        loginedUsers = (List) application.getAttribute("LOGINED_USER");
        }
        // 把新登录用户的信息存入访问者列表中
        loginedUsers.add(logineduser); 
        application.setAttribute("LOGINED_USER", loginedUsers);
        response.sendRedirect("index.jsp");
        }
        3、在新闻发布系统左导航left.jsp页面中加入超链接
        <a href="showAllLoginedUsers.jsp" target="mainFrame">已访问人数统计</a>
        4、创建已访问人数统计页面showAllLoginedUsers.jsp
        <html>
        <%
                    // 访问者列表
        List loginedUsers = new ArrayList();
                    // 从全局范围内取出访问者列表
                    if (application.getAttribute("LOGINED_USER") != null) {
                            loginedUsers = (List) application.getAttribute("LOGINED_USER");
                    }
        %>
        <body>
        <p align="center"><br><br><br>
        目前,有<%=loginedUsers.size()%>人已经访问过本网站!<br><br>
        访问者的登录名称分别是:<br>
        <%
                        for (int i = 0; i < loginedUsers.size(); i++) {
                                User logineduser = (User) loginedUsers.get(i);
                                out.print(logineduser.getName());
                                out.print("<br/>");
                        }
        %> 
        </p>
        </body>
        </html>




8.overload和override的区别。overload的方法是否可以改变返回值的类型?
Overload和Override的区别。Overload的方法是否可以改变返回值的类型?


Overload:重载


Override:重写


 


重载:


       同一个类中,方法名相同,参数列表不同。与返回值类型无关。


 


重写:


       存在于子父类,或者子父接口中,方法声明相同。


 


Overload的方法可以改变返回值的类型,因为它与返回值类型无关。




9.编程题:写一个singleton出来。
Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
  一般Singleton模式通常有几种种形式:
  第一种形式:定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。
public class Singleton {
  private Singleton(){}
  //在自己内部定义自己一个实例,是不是很奇怪?
  //注意这是private 只供内部调用
  private static Singleton instance = new Singleton();
  //这里提供了一个供外部访问本class的静态方法,可以直接访问  
  public static Singleton getInstance() {
    return instance;   
   }
}
  第二种形式:
public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次     
  //使用时生成实例,提高了效率!
  if (instance==null)
    instance=new Singleton();
return instance;   }
}




10.请分别使用java与JavaScript写出九九乘法表。
public class Nine{
public static void main(String args[]){
for(int x = 1;x<=9;x++){
for(int y = 1;y<=x;y++){
System.out.println(x + "*" + y + "=" + (x*y));
}
}
}
}






<script language=javascript>
for(i=1;i<=9;i++){
for(j=1;j<=9;j++){
document.write (i+"*"+j+"="+i*j+"&nbsp;");
if(i==j) 
{document.write ("<br/>"); break;}  //用的if语句,如果这两个数字相同了 那么跳出,另起一行
}
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值