关于毕业生程序员要会的技术

因为本人也是一个实习生,所以想写一些关于笔试面试的一些必备的知识(如有缺点请指教)

 

一 ,先说一下企业的面试题的结构吧!

 

    1,一般分为选择,程序,web题。。具体看我举例。

二,选择题的重点

  list,map,linklist,hash含义以及它们的区别,和在网站的应用

 list:List集合
    List继承自Collection接口。List是一种有序集合,List中的元素可以根据索引(顺序号:元素在集合中处于的位置信息)进行取得/删除/插入操作。

实例1.
import java.util.*;
public class ArrayListTest{
public static void main(String dd[]){
//new了一个存储list
List l=new ArrayList();
//因为Collection framework只能存储对象所以new封装类
l.add(new Integer(1));
l.add(new Integer(2));
l.add(new Integer(3));
l.add(new Integer(4));

Iterator it=l.iterator();
//hasNext是取值取的是当前值.他的运算过程是判断下个是否有值如果有继续.
while(it.hasNext()){
//设it.next封装类,调用Integer的intValue方法返回值为int赋给i;
int i=((Integer)it.next()).intValue();
System.out.println("Element in list is : "+i);
}
}
}

2,linklist:LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.
LinkedList的构造函数如下
1. public LinkedList():  ——生成空的链表
2. public LinkedList(Collection col):  复制构造函数
直接上代码:
import java.util.LinkedList;
  • publicclass   public static void    aa(){
  • LinkedList<String> lList = new     lList.add();  
  •     lList.add(1“”);  
  •     lList.add(“2”);  
  •     lList.add(“3”);  
  •     lList.add(“4”);  
  •    System.out.println( + lList.getFirst());  
  •   System.out.println( + lList.getLast());
  • list.removeFirst();  
  •    list.removeLast();  
  •   System.out.println(list); 
  •       
  • }  
以上是最基本的使用方法,以上功能主要是增加删除,高级用法大家可以百度下。
其实linklist和list最大区别就是:
1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。(数据结构以后我会说的)
2.对于随机访问get和set,List优于LinkedList,因为List可以随机定位,而LinkedList要移动指针一步一步的移动到节点处。(参考数组与链表来思考)
3.对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。

3,map和hashmap
HashMap是类,Map是接口,HashMap实现了接口Map,就是说HashMap实现了Map所有的方法
区别在于:
1.灵活性 定义为Map之后更灵活 今后才有可能在需要的时候替换为HashMap之外的其它实现如TreeMap等
2,有得必有失,第一种的tradeoff就是无法调用HashMap特有的方法,也就是存在于Map接口中所定义的方法之外的HashMap自己的方法,当然同时也是HashMap未override的方法.

三,下面就说一下第二部分
第二部分基本都是jsp一些基础知识:
1,什么是cookie?Session和cookie有什么区别?
Cookie是会话技术,将用户的信息保存到浏览器的对象.

Session也是会话技术,将Session的信息保存到服务器的对象.Session是基于Cookie的 利用Cookie向浏览器回写JSessionID.




2,一网站如果有大量的人登陆访问。那么会产生很多的session,如果你是程序员你该怎么办。
session默认保存在内存中,内存资源宝贵,session数据量大导致内存利用率高,以下方案解决session内存存储问题:

1、可以设置session超时时间,达到超时时间session自动清空

<session-config>

<session-timeout>20</session-timeout>

</session-config>  

2、将session中的数据序列化到硬盘中

3、不使用session,使用cookie(此方法存在安全性问题)
3,Jsp有哪些内置对象?作用分别是什么?
Page,pageContext,request,response,session,application,out,config,exception

Page指的是JSP被翻译成Servlet的对象的引用.

pageContext对象可以用来获得其他8个内置对象,还可以作为JSP的域范围对象使用.pageContext中存的值是当前的页面的作用范围》

request代表的是请求对象,可以用于获得客户机的信息,也可以作为域对象来使用,使用request保存的数据在一次请求范围内有效。

Session代表的是一次会话,可以用于保存用户的私有的信息,也可以作为域对象使用,使用session保存的数据在一次会话范围有效

Application:代表整个应用范围,使用这个对象保存的数据在整个web应用中都有效。

Response是响应对象,代表的是从服务器向浏览器响应数据.

Out:JSPWriter是用于向页面输出内容的对象

Config:指的是ServletConfig用于JSP翻译成Servlet后 获得Servlet的配置的对象.

Exception:在页面中设置isErrorPage=”true”,即可使用,是Throwable的引用.用来获得页面的错误信息

4,
Servlet 的生命周期,并说出 Servlet 与 CGI 的区别

Web 容器加载 Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其 init 方法进行 Servlet 的初始化,请求到达时运行其 service 方法,service 方法自动派遣,运行请求的 doXXX 方法(doGet、doPost),当服务器决定将实例销毁的时候调用其 Destroy 方法。与 CGI 的区别在于,Servlet 处于服务器进程中,它通过多线程方式运行其 service 方法,一个实例可以运行多个请求,并且其实例一般不会销毁,而 CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于 Servlet

5,forward 与 redirect 的区别

forward 是控制权的转向,是服务器请求资源,服务器直接请求目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器。浏览器不知道服务器发送的内容是哪儿来的,所以它的地址还是原来的地址。redirect 就是服务器端根据逻辑,发送一个状态码,告诉浏览器去请求一个新的地址,浏览器地址栏上显示的是新的请求地址。forward 更高效。有些情况下,如果需要使用其它服务器上的资源,则必须使用 redirect

6,JSP 的四种数据共享范围

pageContext 是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Servlet 类(可以带有任何的 include 指令,没有 include 动作)表示。这既包括 Servlet 又包括被编译成 Servlet 的 JSP 页面

Request 是代码 web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 web 组件(由于 forward 指令和 include 动作的关系)

Session 是代表与用于某个 web 客户机的一个用户体验相关的对象和属性。一个 web 会话可以也经常或跨越多个客户机请求

Application 是代表与整个 web 应用程序相关的对象和属性。这实质上是跨越整个 web 应用程序,包括多个页面、请求和会话的一个全局作用域


7,
JSP 和 Servlet 有哪些相同点和不同点,它们之间的联系是什么

JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的视图表达。JSP 编译后是“Servlet 类”。Servlet 和 JSP 最主要的不同点在于,Servlet 的应用逻辑是在 Java 文件中,并且完全从表示层中的 HTML 里分离开来。而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为 .jsp 的文件。JSP 侧重于视图,Servlet 主要用于控制逻辑

8,

能单独使用jsp或当独使用servlet做网站吗!如果能,他们能否分别单独使用但是做出相同的功能!(10分)


 能够单独使用jsp或者Servlet做网站,单独使用时也能做出相同的功能。jsp的实质也是Servlet。所以两者时一样一眼的。只是用jsp做页面相对比较容易控制一点。




四,大概意思就是你会不会点前端东西,都是很简单的东西,上问题和代码吧
jquery怎么使用,你就这样回答,
首先jquery是一个库,具体使用方法
$("唯一标识").事件(){

   //要操作的逻辑     

五,数据库问题

一、sql

student表(学生表)

学号

姓名

性别

年龄

系别

1

吴好

18

计算机系

2

崔平

21

经管系

3

钱筱

19

电子系


course表(课程表) sc表(选课表)

课程号

课程名

学分

1

SQL Server

4

2

数据结构

3

3

专业英语

2

Middle表(中间表)

学号

课程号

成绩

1

1

88

2

1

90

2

2

70

3

3

79


1、 把course表中课程号为3的课程的学分修改为3。

update from course set 学分=3 where 课程号=3;
2、 在student表中查询年龄大于18的学生的所有信息,并按学号降序排列。

Select * from student 年龄>18 order by 学号  desc;
3、 在以上三个表中查询选的课程的“学分”为3,并且成绩大于80的学生的学号、姓名和性别。

Select 学号,姓名,性别 from student, Middle studet.学号=Middle.学号 成绩>80



六,框架问题(不管公司面试的是你什么框架,ssm或者ssh。ssi他们的原理都是一样的,不要怕面试官,直接告诉他你们学的是什么框架,因为做多了就知道他们是一样的原理,我所学的事ssm,但公司用的ssi,原理一样)

1、结合java web开发说说你对MVC的理解!(10分)

V:视图层  jsp

C:控制层  Servelt

M:模型层

在JavaWeb开发中,MVC是一种一种设计模式,这种模式的优点是把用户界面、业务处理和程序逻辑结构的控制模块化的分开。C层是指控制层,在JavaWeb中通常使用一个Servlet来描述程序的整个框架和控制。V指的是视图层,控制用户界面,在JavaWeb中由JSP来描述。M是指模型层,该层主要负责业务逻辑的处理。连接了C层和V层。

2,简单介绍下你对springMVC的理解?

Spring MVC Framework有这样一些特点:

它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是java组件.并且和Spring提供的其他基础结构紧密集成.

不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的)

可以任意使用各种视图技术,而不仅仅局限于JSP

支持各种请求资源的映射策略

它应是易于扩展的

3,SpringMVC的工作流程?

1. 用户发送请求至前端控制器DispatcherServlet

2. DispatcherServlet收到请求调用HandlerMapping处理器映射器。

3. 处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。

4. DispatcherServlet通过HandlerAdapter处理器适配器调用处理器

5. 执行处理器(Controller,也叫后端控制器)。

6. Controller执行完成返回ModelAndView

7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet

8. DispatcherServlet将ModelAndView传给ViewReslover视图解析器

9. ViewReslover解析后返回具体View

10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)。

11. DispatcherServlet响应用户

4,SSM优缺点、使用场景?

1. Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。

2. Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。

3. Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。


5, 简单介绍下你对mybatis的理解?

1. mybatis配置

2. SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

3. mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

4. 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

5. 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。

6. mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

7. Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

8. Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

9. Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

6,什么是控制反转(IOC)?什么是依赖注入?

控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。

控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用。

依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?

在Java中依然注入有以下三种实现方式:

  1. 构造器注入
  2. Setter方法注入
  3. 接口注入

7请解释下Spring框架中的IoC?

Spring中的 org.springframework.beans 包和 org.springframework.context包构成了Spring框架IoC容器的基础。

BeanFactory 接口提供了一个先进的配置机制,使得任何类型的对象的配置成为可能。ApplicationContex接口对BeanFactory(是一个子接口)进行了扩展,在BeanFactory的基础上添加了其他功能,比如与Spring的AOP更容易集成,也提供了处理message resource的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对Web应用的WebApplicationContext。

org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具体实现,用来包装和管理前面提到的各种bean。BeanFactory接口是Spring IoC 容器的核心接口

8,使用Spring框架能带来哪些好处?

下面列举了一些使用Spring框架带来的主要好处:

  • Dependency Injection(DI) 方法使得构造器和JavaBean properties文件中的依赖关系一目了然。
  • 与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利。
  • Spring并没有闭门造车,Spring利用了已有的技术比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他视图技术。
  • Spring框架是按照模块的形式来组织的。由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。
  • 测试一项用Spring开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用JavaBean形式的POJO类,可以很方便的利用依赖注入来写入测试数据。
  • Spring的Web框架亦是一个精心设计的Web MVC框架,为开发者们在web框架的选择上提供了一个除了主流框架比如Struts、过度设计的、不流行web框架的以外的有力选项。
  • Spring提供了一个便捷的事务管理接口,适用于小型的本地事物处理(比如在单DB的环境下)和复杂的共同事物处理(比如利用JTA的复杂DB环境)

9什么是控制反转(IOC)?什么是依赖注入?

控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。

控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用。

依赖注入是在编译阶段尚未知所需的功能是来自哪个的类的情况下,将其他对象所依赖的功能对象实例化的模式。这就需要一种机制用来激活相应的组件以提供特定的功能,所以依赖注入是控制反转的基础。否则如果在组件不受框架控制的情况下,框架又怎么知道要创建哪个组件?

在Java中依然注入有以下三种实现方式:

  1. 构造器注入
  2. Setter方法注入
  3. 接口注入

七,web题

 1,在线人数怎么做,(知识点session)

利用session 每次用户登录会产生一个session 
因为考虑到一台电脑多个浏览器之间session不共享也就是可能会形成这样一个概念,你的同一个用户名在服务器中打开了两个不同版本的浏览器因此保存了2个session,也就造成了不准确的因素
所以你可以采用一张专门登录的数据库表格,字段不用多 保存登录的用户名就行,然后javaweb中有session的监听接口HttpSessionBindingListener,这个接口包含的两个方法分别会在每次因用户生成一个session触发,以及因用户正常注销session或非法超时服务器摧毁session后触发,
我们要做的细化工作就是,当每个用户产生一次session时(登录操作),查找这张表格是否已有此账号的登录记录。有则在此登录表中不做增加操作,没有则增加该用户到次登录表。
这样可以实现相对精准的登录人数,但对非法退出的用户,我想至今也没有一个好的想法,这种登录会多存在于服务器,知道服务器判定该session超时然后删除,该用户也就自动被删除登录表

2,新闻网站(知识点单例模式)

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例,因为一个类只有一个实例,

所以新闻不管哪个用户进来就是一个对象。

就总结到这里了。
在面试过程不要紧张,因为你和面试官以后是同事的关系,自己会的多说一点,不会的尽量不要提,毕竟面试官会的比你多,你不懂一说就是错的,这样就暴露了你的缺点,还有就是回答问题清楚点,如果你没组织好你的语言,面试官听不懂就会继续问你一些别的问题,慢慢你就会别问死,祝各位同学面试成功











posted @ 2017-04-09 14:42  佟印龙  阅读(431)  评论(0)    收藏  举报