赞
踩
解析:final是Java中的关键字,修饰符,用于声明 属性(属性不可交变)、方法(方法不可覆盖)、类(类不可继承)。
finally 是 异常处理语句结构 的一部分,不管是否有异常,他的语句总是执行。
finalize 是Object类的一个方法,主要是在收集器执行的时候会调用被回收对象的此方法,进行资源回收,例如关闭文件等。
解析: remove() 和 poll()都是用来从队列头部删除一个元素。
在队列元素为空的情况下,remove() 方法会抛出NoSuchElementException异常,poll() 方法只会返回 null 。
解析:
1、List和Set是存储单列数据的集合,Map是存储键值对这样的双列数据的集合;
2、List中存储的数据是有顺序的,并且值允许重复;Map中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;Set中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的hashcode决定,即位置是固定的(Set集合是根据hashcode来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说set中的元素还是无序的)。
List遍历的方式:
- public static void main(String[] args) {
- List<Integer> list = Lists.newArrayList();
- list.add(1);
- list.add(2);
- list.add(3);
-
- //方法一 普通for循环遍历
- System.out.println("普通for循环遍历");
- for (int i = 0; i < list.size(); i++) {
- System.out.println(list.get(i));
- }
-
- //方法二 增强for (也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。
- //内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
- System.out.println("增强for");
- for (int i : list) {
- System.out.println(i);
- }
-
- //方法三 Lambda
- System.out.println("Lambda");
- list.forEach(e -> {
- System.out.println(e);
- });
-
- list.stream().forEach(e -> {
- System.out.println(e);
- });
-
- //方法四 倒序遍历
- System.out.println("倒序遍历");
- for (int i = list.size() - 1; i >= 0; i--) {
- System.out.println(list.get(i));
- }
-
- //方法五 迭代器遍历
- System.out.println("迭代器遍历");
- Iterator<Integer> it = list.iterator();
- while (it.hasNext()) {
- System.out.println(it.next());
- }
-
- //方法六 List集合自带迭代器
- System.out.println("List集合自带迭代器");
- ListIterator<Integer> listIterator = list.listIterator();
- while(listIterator.hasNext()){
- System.out.println(listIterator.next());
- }
- }
解析:
1、继承Thread类,重写run方法
2、实现Runnable接口,重写run方法
3、 使用Callable接口 和 FutureTask类创建线程
4、通过线程池创建线程
解析:
(1)String为固定长度的字符串,StringBuffer和StringBuilder为变长字符串;
(2)String中的对象是不可变的,也可以理解为常量,线程安全。
StringBuffer是线程安全的,它的所有公开方法都是同步的(Synchronized),而StringBuilder 是没有对方法加锁同步的,因此StringBuilder的性能要大于StringBuffer。
(3)String适用于少量的字符串操作的情况。
StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况。
StringBuffer适用多线程下在字符缓冲区进行大量操作的情况。
解析:
1、相同点:sleep()和wait()都可以暂停线程的执行。
2、不同点:
所在类不同
sleep()是Thread类的静态方法;wait()是Object类的方法。
锁释放不同
sleep()是不释放锁的;wait()是释放锁的。
用途不同
sleep()常用于一定时间内暂停线程执行;wait()常用于线程间交互和通信。
用法不同
sleep()方法睡眠指定时间之后,线程会自动苏醒。
wait()方法被调用后,可以通过notify()或notifyAll()来唤醒wait的线程。
解析:
Lock是一个接口,而synchronized是关键字。
synchronized会自动释放锁,而Lock必须手动释放锁。
Lock可以让等待锁的线程响应中断,而synchronized不会,线程会一直等待下去。
通过Lock可以知道线程有没有拿到锁,而synchronized不能。
Lock能提高多个线程读操作的效率。
synchronized能锁住类、方法和代码块,而Lock是块范围内的
解析:
try指定预防所有“异常”的程序;
catch来指定要捕捉的“异常”类型;
throw 用来明确地抛出一个“异常”;
throws用来声明可能抛出的异常;
finally为确保一段代码不管发生什么“异常”都被执行。
解析:编写mybatis的映射语句时,尽量采用#{xxx}这样的格式
解析:token和jwt都是用来访问资源的令牌凭证,需要验证来确定身份信息
服务端验证客户端发送的token信息要进行数据的查询操作,Jwt验证客户端发来的token就不用,在服务端使用密钥校验就可以了,不用数据库的查询。
解析:常见的有五种:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)。扩展【随着 Redis 版本的更新,后面又支持了四种数据类型: BitMap(2.2 版新增)、HyperLogLog(2.8 版新增)、GEO(3.2 版新增)、Stream(5.0 版新增)。】
解析:
1、springMVC安全性更高,structs2框架是类级别的拦截,每次request请求structs2都会为之创建一个action,然后将数据注入到实体been中,所以在structs2中,一个action对应一个request上下文。springMVC是方法级别的拦截,每个request对应一个方法,然后通过注解将数据注入到对应的实体中,所以在springMVC中,一个方法对应一个request上下文,粒度更小,所以说springMVC更安全
2、springMVC直接使用注解的方式,配置更加的简洁清晰,structs2将所有路径配置放在structs.xml文件中,多人开发的时候更容易产生冲突,配置相对复杂,但这也是structs2的一个优点,就是可以在这个文件中找到所有的路径。
3、springMVC的异常处理机制更加的优秀。Structs2因为在Action的execute方法声明时就抛出了Exception异常,所以我们无需再execute方法中捕捉异常,仅需在struts.xml 中配置异常处理;在springMVC中采用统一的异常处理框架,配置异常处理之后直接在执行方法中抛出对应的异常,更加的准确,显示更加友好的用户界面提示。
4、相对于Structs2,springMVC的参数传递更加方便。springMVC直接使用对应的实体去接收form提交的表单信息,而structs2要在form中指定对应的实体,否则structs无法区分form中的数据对应哪个实体
解析:
Ajax主要作用:
1.不刷新页面而更新网页(局部刷新)
2.在页面加载后从服务器请求数据
3.在页面加载后从服务器接收数据
4.在后台向服务器发送数据
ajax请求的基本流程
要完整实现一个AJAX异步调用和局部刷新,通常需要以下几个步骤:
1.创建 XMLHttpRequest 请求对象, 即创建一个异步调用对象。( new XMLHttpRequest() )
2.打开请求地址,指定请求方式。(open)
3.设置响应HTTP请求状态变化的函数.
4.发送HTTP请求。(send)
5.监听对应的请求状态的变化。( readystatechange事件 )
6.读取响应数据,使用 JavaScript 和 DOM 实现局部刷新。
解析:
1、JVM 是Java平台的核心组件。JVM 的作用是执行 Java 字节码,它是一种解释器,负责执行 Java 程序。JVM 是跨平台的,因此 Java 程序可以在任何具有 JVM 的系统上运行,而无需对代码进行修改。
2、JVM 是一种字节码解释器,通过将 Java 程序编译成字节码,并在 JVM 上运行这些字节码来执行程序。JVM 提供了一组标准的指令集,并通过管理内存来实现自动内存管理,消除了内存泄漏的风险。
3、JVM 也具有很强的安全性。它限制了 Java 程序的权限,确保它不能损害系统的安全或隐私,并确保程序不能访问不属于它的资源。
4、此外,JVM 还提供了一组管理工具,以监控和管理 Java 程序的性能。例如,它可以监控程序的内存使用情况,并自动回收不再使用的内存,以确保程序始终保持高效。
- public void test (int i)
- {
- lock(this)
- {
- if ( i>10)
- {
- i--;
- test( i );
- }
- }
- }
解析:不会发生死锁,(但有一点int是按值传递的,所以每次改变的都只是一个副本,因此不会出现死锁。但如果把int换做一个object,那么死锁会发生)
解析:将对象作为程序的基本单元,将程序和数据封装在其中,以提高软件的复用性,灵活性以及可扩展性
- class A
- {
- protect int val = 1000;
-
- static
- {
- System.out.println("A static");
- }
- public A ( )
- {
- val++;
- System.out.println("A construtor( ),val="+val);
- }
- public void display( )
- {
- val++;
- System.out.println("A display( ),val="+val);
- }
- }
- class B extends A
- {
- static
- {
- System.out.println("B static");
- }
- public B( )
- {
- val++;
- System.out.println("A display( ),val="+val);
- }
- public void display( )
- {
- val++;
- System.out.println("B display( ),val="+val);
- }
- }
- public class Test
- {
- public static void main (String args[ ])
- {
- A a = new B( );
- a.display ( );
- }
- }
- public class Playground {
- public static void printList(List<Number> list) {
- //TODO
- }
-
- public static void main(String[] args) {
- List<Integer> li = Arrays.asList(1, 2, 3);
- printList(li);
- }
- }
- Runnable mRunnable = new Runnable() {
- @Override
- public void run() {
- System.out.println("Run!");
- }
- };
解析:封装、继承、多态、抽象。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。