简单的Java题目

1.Java面向对象四个特征和理解

封装性:主要是针对对类的封装。一个业务逻辑的实现往往需要多个对象和方法去实现,
封装旨在对不同对象的方法进行封装处理,即不同对象的方法处在一个单独的对象类中。
继承性:使用一个特殊类拥有其全部的属性和服务,子类可以继承父类,可以重写父类的方法
也可以有自己的方法,一个子类只能继承一个父类
多态性:多态有三个条件:继承,重写,父类对象引用指向子类对象
抽象性:java中的轴向可以是抽象类、抽象方法,使用abstract修饰,其中抽象类中可以
有抽象方法和非抽象方法。有抽象方法的类一定是抽象类
抽象类一般只有方法声明,没有方法的实现,子类继承抽象父类时要按时限父类所有抽象方法

2.int/Integer/AtomicInteger的区别
AtomicInteger是一个提供原子操作的Integer类(原子类),通过线程安全的方式操作加减
适合高并发情况使用
Integer使用必须加上synchronized保证增不会出现并发线程同时访问的情况,
AtomicInteger无需
Integer线程不安全
Integer/AtomicInteger都是int的包装类

Integer是int的包装类,int则是java的一种基本数据类型
Integer变量必须实例化后才能使用,而int变量不需要
Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
Integer的默认值是null,int的默认值是0

3.&和&&的区别
对&&和&都是表示与,区别是&&只要第一个条件不满足,后面条件就不再判断。而&要对所有的条件都进行判断。

4.equals()和==的区别
一个是方法一个是运算符,在Java中,二者比较的都是物理地址 而不是值的比较。
在String中equals方法被重写,当物理地址不同时,会进一步比较值
单单重写equals方法并不能改变hashcode值,在java中 首先比较的就是hashcode

5.String/StringBuffer/StringBuilder的区别
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象
java.lang.StringBuilder一个可变的字符序列是5.0新增的此类提供一个与 StringBuffer 兼容的 API,但不保证同步。
用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,
因为在大多数实现中,它比 StringBuffer 要快。两者的方法基本相同。

6.Heap和Stack的区别
Java中对象都是分配在heap(堆)中。从heap中分配内存所消耗的时间远远大于从stack产生存储空间所需的时间
(1)每个应用程序运行时,都有属于自己的一段内存空间,用于存放临时变量、参数传递、函数调用时的PC值的保存。这叫stack。
(2)所有的应用可以从一个系统共用的空间中申请供自己使用的内存,这个共用的空间叫heap。
(3)stack中的对象或变量只要定义好就可使用了,应用程序结束时会自动释放。
(4)而要使用heap中申请的变量或对象只能定义变量指针,并要求在运行过程中通过new来动态分配内存空间,而且必须显示地free你申请过的内存,不过Java的垃圾回收机解决了这个问题,它会帮你释放这部分内存。
(5)stack中变量的大小和个数会影响exe的文件大小,但速度快。堆中的变量大小与exe大小关系不大,但分配和释放需要耗费的时间远大于stack中分配内存所需的时间。

存在栈中的数据可以共享
int a = 3;
int b = 3;
基本数据类型在stack中,包装类数据在堆内

7.抽象类和接口的区别

1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然eclipse下不报错,但应该也不行),
但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法(jdk8之后接口可以有静态方法)
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
使用上接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。
而抽象类在代码实现方面发挥作用,可以实现代码的重用
8.方法重写和重载的区别

9.Java死锁的原因是什么,如何避免

线程在获得一个锁L1的情况下再去申请另外一个锁L2,也就是锁L1想要包含了锁L2,
也就是说在获得了锁L1,并且没有释放锁L1的情况下,又去申请获得锁L2,
这个是产生死锁的最根本原因。另一个原因是默认的锁申请操作是阻塞的。

避免在对象的同步方法中调用其它对象的同步方法,那么就可以避免死锁产生的可能性

死锁的根本原因1)是多个线程涉及到多个锁,这些锁存在着交叉,所以可能会导致了一个锁依赖的闭环;
2)默认的锁申请操作是阻塞的。
所以要避免死锁,就要在一遇到多个对象锁交叉的情况,就要仔细审查这几个对象的类中的所有方法,
是否存在着导致锁依赖的环路的可能性。

10.对泛型和注解(annotation)的理解和常见用法
泛型类型是通过类型参数化的泛型类或接口
注解是一种元数据,本身没有任何作用,如果要有,必须依附在具体的对象上,
常见的注解是@Override 编译器检查重写,即父类中需要有该方法

11.Mvc的理解

12.使用Spring有什么好处
方便解耦
1)Spring能有效地组织你的中间层对象。
(2)Spring能消除在许多工程中常见的对Singleton的过多使用。
(3)Spring能消除各种各样自定义格式的属性文件的需要,使配置信息一元化。
4)Spring能够帮助我们真正意义上实现针对接口编程。

13.Servlet容器如何同时处理多个请求
Servlet采用多线程来处理多个请求同时访问。servlet依赖于一个线程池来服务请求
当容器收到一个Servlet请求,调度线程从线程池中选出一个工作者线程,
将请求传递给该工作者线程,然后由该线程来执行Servlet的service方法。
当这个线程正在执行的时候,容器收到另外一个请求,调度线程同样从线程池中选出另一个工作者线程来服务新的请求,
容器并不关心这个请求是否访问的是同一个Servlet.当容器同时收到对同一个Servlet的多个请求的时候,
那么这个Servlet的service()方法将在多线程中并发执行。

14.连接池的工作原理
连接池的核心思想是连接的复用,通过建立一个数据库连接池以及一套连接使用、分配和管理策略,
使得该连接池中的连接可以得到高效,安全的复用,避免了数据库连接频繁建立和关闭的开销。
三部分:
连接池的建立:一般在系统初始化时,连接池会根据系统配置建立,
并在池中建立几个连接对象,以便使用时能从连接池中获取,
连接池中的连接不能随意创建和关闭

连接池中连接的使用管理:
当客户请求数据库连接时,首先查看连接池中是否有空闲连接,如果存在空闲连接,
则将连接分配给客户使用;如果没有控线连接,则查看当前所开的连接数是否已经达到最大连接数,
例如如果没有达到就重新创建一个请求的客户;如果达到,就按设定的最大等待时间进行等待,
如果超出最大等待时间,则抛出异常给客户

连接池的关闭:
当应用程序退出时,关闭连接池中所有的链接,释放连接池相关资源,该过程正好与创建相反。

15.jdbc如何防止SQL注入

使用PreparedStatement
PreparedStatement使用预编译机制,在创建PreparedStatement对象时就需要将sql语句传入,
传入的过程中参数要用?替代,这个过程回导致传入的sql被进行预编译,
然后再调用PreparedStatement的setXXX将参数设置上去,由于sql语句已经经过了预编译,
再传入特殊值也不会起作用了。
而且PreparedStatement使用了预编译机制,sql语句在执行的过程中效率比Statement要高。

16.Linux常用命令及作用
cd 切换目录
touch 创建空文件
echo 创建带有内容的文件。
cat 查看文件内容
cp 拷贝
mv 移动或重命名
rm 删除文件
grep 在文本文件中查找某个字符串
rmdir 删除空目录
tree 树形结构显示目录,需要安装tree包
pwd 显示当前目录
tar:打包

17.线程同步的实现有哪些方法
synchronized关键字
​volatile关键字
Lock

18.常见的设计模式
创建型模式(五种):工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
结构型模式(七种):适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
行为型模式(十一种):策策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

19.一个表保存论坛帖子,查询其中一个版面最新的帖子列表,
请提供MySql创建索引的语句和帖子列表查询语句
字段名称:threadID(帖子ID)、forumID(版面ID)、postTime(发表时间)
索引创建语句:create index thread_index on table_name(threadID,forumID)
帖子查询语句:select *from table_name where threadID=? and forumID=? and postTime=?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值