Java常用面试题

1、jdk和jre的区别:
jdk就是java的开发工具集,顾名思义就是你做开发用的。
jre就是java程序的运行环境。
编写完的程序需要由jvm解释成具体平台上的机器指令执行。

2、overload和override区别★★★★★
overload是方法重载,一个类中,方法名一致,但是参数类型,个数等都不相同
override是方法重写,父类子类之间,方法名,参数类型个数等都一样。

3、说说java的基本数据类型
共有8种基本数据类型,分别是:short long double float byte int char boolean
切记不可说String 它是一个对象

4、 int 和 Integer 的区别
int 是基本数据类型
Integer是其封装类。

5、你都用哪些设计模式 ★★★
常用工厂方法模式,
例如spring new类这件事就是spring来实现的,
它就像是一个生产类的工厂,不断生产类。

 单例模式,例如springmvc,servlet  都是单例的  只有一个对象

6、谈谈你对接口和抽象类的区别
接口 interface 中只可以定义方法,不可以实现。实现了接口必须重写方法
抽象类 abstract 可以定义抽象方法,定义普通方法,实现了抽象类必须重写抽象方法。

7、java可以跨平台吗?说说是为什么?
java是可以夸平台的,程序运行在jvm虚拟机中。只要有java环境就可以运行。

8、说说 final,finally,finalize的区别
final 是个修饰符
修饰变量 不可以改变值
修饰方法 不可以被重写
修饰类 不可以被继承
finally 处理异常的时候用的
finalize 是一个方法,在垃圾收集器删除对象之前对这个对象调用的。
9.什么是GC?
GC负责管理java中对象的分配和释放

11、h5和h4的区别
h5是一种网页设计的主流,相比于h4提供了更加强大的机制和功能,更利于编写
更加酷炫的效果,以及适应不同大小尺寸的屏幕。

12、数组没有length()方法,但是有length属性 String有length()方法

13、说说左右外关联 ★★★★★
左外关联 A left outer join on B 查询A表中的所有数据 然后查询出右表中相关联的的数据
例如:
A表中有5个学生
B表中有3个学生的成绩
用左外关联 会查询出5条数据
另外两个学生的成绩为空

14、进程和线程的区别
进程是独立的 进程包括线程

15、作用域public . Private . Protected . Friendly 的区别,以及默认是哪儿个
public 公有的 项目中都可以被访问到
protected 受保护的,包内,子类可以被访问到

 private 私有的,只有本类可见 

16、怎么读出和写入文件
使用File类和流类完成相应的读取写入文件

18、怎么理解什么是同步?
同步用来控制共享资源在多个线程间的访问,
以保证同一时间内只有一个线程能访问这个资源.
保证线程安全性。

19、简述你了解的编程思想

    面向过程  
面向对象
    面向切面
    面向配置文件

20、sql语言又称为
结构化查询语言

21、List、Map、Set三个接口,存取元素时,各有什么特点?★★★★★
List 以特定次序来持有元素,可有重复元素。
Set 无法拥有重复元素,内部排序。
Map 保存key-value值,value可多值。

24、 jsp九大内置对象★★★★★
request、 请求对象,一般用于单次传递数据
response、响应对象
session、 用户与浏览器的会话对象,常用于保存用户登录信息
application、服务器对象,所有用户公用一个对象
out、 页面输出对象
page、 页面对象
exception 异常对象
pagecontext、
config、

25、cookie和session 的区别?★★★

    1、cookie数据存放在客户的浏览器缓存中,session数据放在服务器上。
    2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
       考虑到安全应当使用session。
    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
       考虑到减轻服务器性能方面,应当使用COOKIE。
    4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

26、servlet生命周期 ★★★★★

    默认情况下 servlet在用户第一次访问的时候,执行init()方法,创建servlet
    对象。之后不会创建新的对象,servlet是单例的!
    在服务器关闭的时候 执行destory()方法 销毁实例。

    servlet因为是单例的,所以存在线程安全问题,尽量避免使用公共变量!

    如果需要servlet在服务器启动的时候实例化,需要在web.xml中配置一下。
    <load-on-startup>

27. tomcat 默认端口号:8080 (web服务器) jboss ★★★★

    tomcat 端口号怎么改:conf 文件夹下 server.xml文件中修改

28. mysql 默认端口号:3306 (数据库)
navicat 连接操作数据库的软件
29. oracle 默认端口号:
1521
30. 常见的 IDE 开发软件的工具
dreamwaver 开发html的
Myeclipse
eclipse
navicat 操作mysql数据库软件
svn/cvs 版本控制工具
plsql 连接oracle数据库操作软件
31. javascript 是什么 ★★★★★
网页脚本语言帮助我们实现一些动态效果,表单校验等。
document对象(代表网页本身) 简称 DOM
document.getElementById(“dd”);//获取一个id为dd的对象

  1. jquery ★★★★★
    JavaScript一个封装,让我们更加灵活便利的编写javascript代码
    常用选择器
    (“#dd”)//选择id为dd的一个组件 (“#dd”)//选择id为dd的一个组件 (“.ddd”)//选择class为ddd的所有组件
    $(“div”)//选择所有页面中div组件
    33.面向切面编程 AOP思想 ★★★★

    Filter过滤器
    SpirngMVC-aop  拦截器 interceptor
    

    Strust2 拦截器 interceptor

    Spring AOP     负责拦截控制层和服务层的事情
    
    面向切面编程好处: 不侵入源代码的一种开发方式,更高级的解耦合
    代码可以灵活的插入程序中某个位置,灵活的拆除。
    常用于:权限控制/日志记录/事务处理
    只拦截add up del开头service层的方法,进行事务处理!
    
    aop作用:常用语权限控制,日志记录等功能。
    

    SpringMVC自动帮我们封装数据就是通过这种技术实现的(无形之中,我们已经用了N遍了)。

34.重定向和请求转发 (Redirect,forward)★★★★★

    重定向Redirect是两次访问,会改变浏览器url路径。不可使用request传递值

    请求转发Forward,内部转发请求,不会改变浏览器url路径,可以使用request传递值

35.post和get请求 ★★★

    post是隐式提交,安全,大小无限制
    get 是 显示提交,不安全,大小有限制
        默认请求都是Get请求
        Get传值:  xxxxx.do?a=xxx&b=xxx         

36.如何优化sql语句 ★★★★★

    1)查询的列名不要写 * 
    2)尽量避免使用 not in 
    3)统一SQL语句的写法,大小写
    4)like语句 注意 不是在必要情况下 不要 like ‘%yue%’
5)查询条件顺序尽量调整,把能够筛选更大力度的条件放在前面。

     例如:性别  工资
                 查询性别男  工资大于8000的人员信息
                 select * from biao where 工资>8000 and 性别='男'
6)查询量大的列 加索引
   比如 类别列查询量大,重复量大。用位图索引。
   唯一列 用唯一索引。       

28.json是什么
一种规范的科学的数据格式
一般用于 处理Javascript 和web服务器端的之间数据交换

  1. 集合(一般用的最多的就是arraylist和hashmap了,知道即可)★★★★★
    集合分为两大块 collection 和 MAP

    List和 set集合
    list:有序可重复
    set:无序不重复

    arraylist 和 vector 几乎一样使用

    arraylist 线程不安全,效率高
    vector 线程安全,效率低

    hashmap 和 hashtable

    hashmap 线程不安全,效率高 键值对 key value (HashMap的特点:针对某个key,取某个值,不怎么适合遍历,但不代表不可以遍历)
    hashtable 线程安全,效率低

    如何遍历无序集合:用迭代器iterator

30.java的三大特性 继承/封装/多态 ★★

继承:实现代码的复用; 

封装:①实现专业分工,调用方便;
    ②隐藏信息,更加安全    

多态:父类或者接口的引用存放子类对象。

优势:降低代码的强耦合,提高代码的扩展性。

  1. 继承:extends ★★
    子类继承父类之后,会获得父类中所有属性和方法
    一个类可以继承1个类
    一个类可以被多个类继承
    java是单继承模式

32.接口:interface 实现关键字 implements ★★
接口中只可以定义方法,不可以具体实现
类实现接口之后,必须重写接口中的方法
一个类可以实现多个接口

33.线程(轻量级的进程): ★★★★★

 线程的实现方式:
    entends Thread;继承这个类
    implements Runnable;实现接口
    两者都要重写run方法
    启动线程用 start方法

线程的生命周期   

    就绪--》运行--》阻塞(sleep,yield,wait)--》就绪--》运行-->死亡


多线程编程时 使用公共资源容易出现线程安全问题(那么可以让线程访问自己的私有资源)
加锁 syn..... 但要避免同步锁被锁死
   ①即给所有要 访问公共资源的入口加锁,只允许一个线程访问进来。
   ②锁住代码块,只允许一个线程访问进来。

34 解决网站访问量过大的问题? ★★★
1.确认服务器硬件是否支持当前的流量。
2.优化访问,数据库。
加缓存技术(二级缓存),就是把动态数据放缓存文件中去,避免对数据库的频繁访问。
优化SQL 。

   3.禁止外部盗链。
   4.控制大文件的下载。或者是说讲大文件放到另一台服务器上。
   5.使用不同的主机分流主要流量。
   6.使用流量分析统计软件。及时知道哪些地方耗费了大量的流量,及时优化这些页面。
   7。事物处理,保证数据完整性。比如添加和修改同时,两者都成立才能执行,否则失败。

35 说说你常见的异常:
空指针 找不到对象
类型转换错误
数组越界
数据库连接异常
文件找到不异常

  1. 谈一下mvc: ★★★★★★
    M:model 模型层 bean实体类
    V:view 视图层 Jsp
    C:control 控制层 servlet ,SpringMVC ,Struts2
    service 服务层 用于处理复杂的业务逻辑操作
    dao 持久层 对数据库的 crud操作。 ibatis mybatis hibernate

    科学的分层架构思想,减少代码耦合,便于我们维护和修改,以及阅读代码。
    
        使数据与逻辑剥离,增强代码的可读性,降低维护成本。
    

37.谈一下SpringMVC和struts2的区别
SpringMVC
核心控制器是servlet
SpringMVC是单例的,线程不安全,不要使用公共变量
通过拦截器
帮助我们自动封装数据,更清晰的流程控制。极大的提高了开发效率

    struts2 核心控制器 filter,
    默认控制层类action是多例的,线程安全的。

    struts2和SpringMVC 都是控制层框架,
    都有拦截器、SpringMVC流程控制更加流畅
    struts2 需要配置大量的xml文件,
    虽然通配符可以解决一部分,但是相比于SpringMVC还是工作量大一些。
    SpringMVC使用注解来处理请求,注入类等。        

38.谈一下Spring ★★★★★

    Spring的核心是控制反转IOC,和依赖注入DI,帮助我们科学的管理创建类对象,
    以及AOP技术实现代码的高层次解耦,处理事务、日志等业务。    

39.Hibernate 和 Mybatis/ibatis的区别

    都是持久层框架,都是对jdbc代码的再次封装。
    Hibernate 老牌优秀框架,面向对象的编写sql的思想。重量级框架,
              封装的比较厉害。对于复杂的sql编写,效率不高。
              一对多多对一管理,懒加载等机制
              懒加载:
                当用户用到关联数据的时候,再去数据库加载数据

    Mybatis/ibatis
                        一对多多对一管理
                        轻量级持久层框架,直接编写sql语句,效率相对较高。
                        配置和编写难度较hibernate更低。

    SSH Struts2 Spring Hibernate
    SSM SpringMVC SPRING Mybatis

数据库:

DDL-建表语句
DML-增删改查
DCL-用户模块语言

DML语言

SQL 注入
一种恶意攻击网站数据库的手段, or 1=1
使用占位符,
Mybatis #{ } ? ”
${ } 直接把传递过来的值 放入sql
事务:
保证一系列相关的操作,全部执行或者全部不执行。
保证数据的安全性。
原子性,稳定性 隔离性 可靠性

序列:
Oracle 使用序列来获取一个唯一的自增的值。

索引:
某一列查询量大,我们加入索引,提交查询效率
不要乱加索引,会导致插入 修改等效率降低

触发器:
当执行插入等数据库操作时,我们使用触发器来触发一系列的事情。
行级触发器,块级触发器
存储过程:
对sql语句进行编程存储,java可以直接调用存储过程
完成一系列的sql 语句操作

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值