&与&&有什么区别?
按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;
逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。
面向对象的特征有哪些方面?
抽象 继承 封装 多态
答:对于short s1 = 1; s1 = s1 + 1;由于1是int类型,因此s1+1运算结果也是int 型,需要强制转换类型才能赋值给short型。而short s1 = 1; s1 += 1;可以正确编译,因为s1+= 1;相当于s1 = (short)(s1 + 1);其中有隐含的强制类型转换。
- Servlet 生命周期:Servlet 加载--->实例化,初始化--->处理请求--->服务结束。
- init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。
- service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。
- destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。
因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。
假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。
属性范围在EL中的名称
Page PageScope
Request RequestScope
Session SessionScope
Application ApplicationScope
2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge
3.逻辑运算符有三个:&&或and、||或or、!或not
4.其它运算符有三个:Empty运算符、条件运算符、()运算符
一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为请求转发。
一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源,称之为请求重定向。
Cookie是把用户的数据写给用户的浏览器。
Session技术把用户的数据写到用户独占的session中。
解决中文乱码问题,解决中文乱码问题有三种方法
1)通过设置响应的头来处理的
response.setHeader("Content-Type","text/.html;charset=UTF-8");
2)通过字节设置响应的头来处理的
response.getOutputStream().write("中国".getBytes("UTF-8"));
3)使用html语言里面的<meta>标签来控制浏览器行为
response.getOutputStream().write("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">".getBytes());
Spring工作原理
1、spring原理
内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
JDBC编码步骤
DriverManager.registerDriver(new com. MySQL .jdbc.Driver());
// 2、获取与数据库的链接
Connection conn = DriverManager.getConnection("jdbc: mysql ://localhost:3306/day15", "root", "");
//System.out.println(conn.getClass().getName()); 要想知道具体类型,就这么办
// 3、创建代表SQL语句的对象
Statement stmt = conn.createStatement();
// 4、执行SQL语句
ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from users");
// 5、如果是查询语句,需要遍历结果集
while(rs.next()){
System.out.println("---------------------");
System.out.println(rs.getObject("id"));
System.out.println(rs.getObject("name"));
System.out.println(rs.getObject("password"));
System.out.println(rs.getObject("email"));
System.out.println(rs.getObject("birthday"));
}
// 6、释放占用的资源
rs.close();
stmt.close();
conn.close();
}
request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request
response 响应对象 类型 javax.servlet.SrvletResponse 作用域 Page
pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page
session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session
application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application
out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page
config 配置对象 类型 javax.servlet.ServletConfig 作用域 Page
page 页面对象 类型 javax.lang.Object 作用域 Page
exception 例外对象 类型 javax.lang.Throwable 作用域 page
已知字符串为:"good good study,day day up"
思路:
1.创建一个map key:出现的字符 value:出现的次数
2.获取字符串中的每一个字符
3.查看字符是否在Map中作为key存在.若存在:说明已经统计过 value+1 不存在:value=1
- public class CountString {
- public static void main(String[] args) {
- String str = "good good study,day day up";
- Map<Character,Integer> map = new HashMap<Character,Integer>();
- for(int i=0;i<str.length();i++){
- char c = str.charAt(i);//用toCharArray()也可以
- if(map.containsKey(c)){//若统计过
- map.put(c, map.get(c)+1);
- }else{
- map.put(c, 1);
- }
- }
- System.out.println(map);
- }
- }
测试结果如下:
wait()可以将一个线程挂起,直到超时或者该线程被唤醒。
在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡
1、写一个类继承自Thread类,重写run方法。用start方法启动线程
2、写一个类实现Runnable接口,实现run方法。用new Thread(Runnable target).start()方法来启动
理论:调用start()后,线程会被放到等待队列,等待CPU调度,并不一定要马上开始执行,只是将这个线程置于可动行状态。然后通过JVM,线程Thread会调用run()方法,执行本线程的线程体。先调用start后调用run,这么麻烦,为了不直接调用run?就是为了实现多线程的优点,没这个start不行。