美文网首页面试
2020年JAVA笔试+面试题整理

2020年JAVA笔试+面试题整理

作者: 黄海佳 | 来源:发表于2020-08-11 07:28 被阅读0次

1.简单排序算法中的两个基本操作是数据项和数据项。

答案:
比较(元素对比)
交换(元素排序)

2.Java中基本的线程同步操作有哪些()、()、()

答案:
synchronized、volatile(关键字)、ThreadLocal(局部变量)

其他解释
JAVA中线程同步的方法网络有7种:
(1)同步方法:由于java的每个对象都有一个内置锁,当用此关键字修饰方法时, 内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。
注: synchronized关键字也可以修饰静态方法,此时如果调用该静态方法,将会锁住整个类。

(2)同步代码块:即有synchronized关键字修饰的语句块。 被该关键字修饰的语句块会自动被加上内置锁,从而实现同步
代码如:synchronized(object){}
注:同步是一种高开销的操作,因此应该尽量减少同步的内容。通常没有必要同步整个方法,使用synchronized代码块同步关键代码即可。

(3)wait与notify
wait():使一个线程处于等待状态,并且释放所持有的对象的lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。
notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。
notifyAll():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。

(4)使用特殊域变量(volatile)实现线程同步
可见性。对一个volatile变量的读,总是能看到(任意线程)对这个volatile变量最后的写入。
原子性:对任意单个volatile变量的读/写具有原子性,但类似于volatile++这种复合操作不具有原子性。

(5)使用重入锁实现线程同步
在JavaSE5.0中新增了一个java.util.concurrent包来支持同步。
ReentrantLock类是可重入、互斥、实现了Lock接口的锁,它与使用synchronized方法和快具有相同的基本行为和语义,并且扩展了其能力。
ReenreantLock类的常用方法有:
ReentrantLock() : 创建一个ReentrantLock实例
lock() : 获得锁
unlock() : 释放锁
注:ReentrantLock()还有一个可以创建公平锁的构造方法,但由于能大幅度降低程序运行效率,不推荐使用
注:关于Lock对象和synchronized关键字的选择:
a.最好两个都不用,使用一种java.util.concurrent包提供的机制,能够帮助用户处理所有与锁相关的代码。
b.如果synchronized关键字能满足用户的需求,就用synchronized,因为它能简化代码
c.如果需要更高级的功能,就用ReentrantLock类,此时要注意及时释放锁,否则会出现死锁,通常在finally代码释放锁

(6)使用局部变量实现线程同步
如果使用ThreadLocal管理变量,则每一个使用该变量的线程都获得该变量的副本,副本之间相互独立,这样每一个线程都可以随意修改自己的变量副本,而不会对其他线程产生影响。
ThreadLocal 类的常用方法
ThreadLocal() : 创建一个线程本地变量
get() : 返回此线程局部变量的当前线程副本中的值
initialValue() : 返回此线程局部变量的当前线程的"初始值"
set(T value) : 将此线程局部变量的当前线程副本中的值设置为value
注:ThreadLocal与同步机制
a.ThreadLocal与同步机制都是为了解决多线程中相同变量的访问冲突问题。
b.前者采用以"空间换时间"的方法,后者采用以"时间换空间"的方式

(7)使用阻塞队列实现线程同步

3、在Java中,Class.forName(lass) 会触发class的static代码块执行,而ClassLoader.load(class)不会

答案
正确

4、下列关于栈的描述中错误的是( A)

A.栈是先进先出的线性表
B.栈具有记忆作用
C.栈能顺序存储也能链式存储
D.对栈的插入与删除操作中,不需要改变栈底指针
解释:
栈是限定只能在表的一端进行插入和删除操作的线性表,入栈和出栈都是在栈顶进行,它们的操作特点是先进后出,因此具有记忆作用

5、执行下列代码后x等于(6)

intx, a=2, b=5,c=-2;x= ++a+b+++c++;

6、请尽量列举你所知道的Web网站常见受攻击的方式及解决办法

(1)SQL注入:SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据]库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。
解决办法:

  • 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。
  • 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  • 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
  • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  • 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
  • sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

(2)跨站脚本攻击(XSS)
解决办法:确保输出到HTML页面的数据以HTML的方式被转义

(3) 跨站请求伪造攻击(CSRF)
解决办法:采用post请求+token

(4)Http Heads攻击
解决办法:检查cookie的大小,限制新cookie的总大写,减少因header过大而产生的拒绝访问攻击

(5)Cookie攻击
解决办法: 现在多数浏览器都支持在cookie上打上HttpOnly的标记,凡有这个标志的cookie就无法通过Java Script来取得,如果能在关键cookie上打上这个标记,就会大大增强cookie的安全性

(6)重定向攻击
解决办法:白名单,将合法的要重定向的url加到白名单中,非白名单上的域名重定向时拒之,第二种解决方案是重定向token,在合法的url上加上token,重定向时进行验证.

相关文章

  • 腾讯笔试面试圈

    整理了一下腾讯往届笔试面试题,希望对大家有帮助: 来源:腾讯笔试面试圈>> 1、史上最全Java面试266题:算法...

  • 滴滴往届笔试面试题大全

    整理了一下滴滴往届笔试面试题,希望对大家有帮助: 来源:滴滴出行笔试面试圈>> 1、史上最全Java面试266题:...

  • 阿里巴巴往届笔试面试题汇总

    整理了一下阿里巴巴往届笔试面试题,希望对大家有帮助: 来源:阿里巴巴笔试面试圈>> 1、史上最全Java面试266...

  • JAVA面试题-笔试题(1)书目录

    笔试题 JAVA面试题之面向对象三大特征 JAVA面试题之面向对象五大基本原则 JAVA面试题之面向对象程序设计的...

  • 2020年JAVA笔试+面试题整理

    1.简单排序算法中的两个基本操作是数据项和数据项。 答案:比较(元素对比)交换(元素排序) 2.Java中基本的线...

  • Collection

    参考地址:Java集合常见面试题集锦Java集合必会14问(精选面试题整理) Java中Collection和Co...

  • IOS面试(2018)

    经典面试题 非技术面试题 C面试题1 C面试题2 C面试题3 iOS笔试题01 iOS笔试题02 iOS笔试题03...

  • ios-面试题链接(四)

    经典面试题 非技术面试题 C面试题1 C面试题2 C面试题3 iOS笔试题01 iOS笔试题02 iOS笔试题03...

  • 2018 iOS面试题系列

    经典面试题 非技术面试题 C面试题1 C面试题2 C面试题3 iOS笔试题01 iOS笔试题02 iOS笔试题03...

  • 阿里JAVA架构师面试136题:JVM+spring+分布式+并

    此文包含 Java 面试的各个方面,史上最全,苦心整理最全Java面试题目整理包括Java基础+JVM+算法+数据...

网友评论

    本文标题:2020年JAVA笔试+面试题整理

    本文链接:https://www.haomeiwen.com/subject/xzfedktx.html