java语言的基本特性?
面向对象、跨平台、多线程、异常处理机制、自动垃圾回收机制。
java程序的执行过程?
编译、运行—将java原码(.java文件)通过编译器(javac.exe)编译成JVM文件(.class文件) 将JVM文件通过java.exe执行输出结果。
java中的数据类型?
基本数据类型(byte、short、char、int、long、float、double、boolean)。
引用数据类型(类-class、接口-interface、数组-[])。
int 与Integer的区别?
int基本数据类型,Integer是int的封装类。
int变量不需要实例化,Integer变量需要实例化后才可以使用。
int默认值是0,Integer默认值是null。
int只在栈区开辟内存空间,Integer在栈区和堆区都有内存分配。
±*/与++/-- 的运算优先级?
++与—优先运算,谁在前先运算谁,变量在前先用后算,符号在前先自身+1或者-1再运算。 (+ - * /)正常运算,先算(* /)后算(+ -)。
break 与continue的区别?
遇到break跳出结束循环,遇到continue结束本次循环进入下次循环。
java中for/while /do…while循环的区别?
For循环有明确的循环次数,先判断循环条件后执行循环体。
While没有明确的循环次数,先判断循环条件在执行循环体,可能一次也不执行。
Do…while没有明确的循环次数,先执行do后面的语句,在判断循环条件,最少执行一次循环。
java中类和对象的关系?
类是抽象的,对象是具体的。类是对象的抽象化,对象是类的实例化。没有类就没有对象,没有对象类就没有意义。
java中静态元素与实例元素的区别?
静态变量属于类级别,实例变量属于对象级别。
静态变量有static修饰,实例变量没有static修饰。
静态变量可以使用类名调用,实例变量只能通过对象调用。
静态变量是在运行前分配内存,实例变量是在运行时分配内存。
java中基本类型与其对应的封装类的区别?
基本类型只能按值传递,封装类是按引用类型进行传递。
基本数据类型内存只分配在栈区,封装类内存在堆区,栈区引用。
基本数据类型速度快,封装类可以更好的处理数据之间的转换。
java中接口与抽象类的区别?
接口使用interface修饰,抽象类是用abstract修饰。
接口的实现使用implements,继承抽象类使用extends
接口不能有构造函数,抽象类可以有构造函数。
一个类可以实现多个接口,只能继承一个抽象类。
接口只能使用public修饰,抽象类可以使用public和Protected修饰。
java中常见的内部类有几种,有什么特点?
静态内部类、成员内部类、局部内部类、匿名内部类。
静态内部类:static修饰,不能访问外部类的普通成员变量,只能访问外部类的静态变量和静态方法。
成员内部类:没有static修饰,可以自由访问外部类的属性和方法。
局部内部类:定义在代码块内,不能被public、protected、private、static修饰。只能访问方法中定义的为final类型的局部变量。
匿名内部类:不能有class、extends、implements,必须继承其他类或者其他接口。
子类可以继承父类的那些元素?
子类可以继承父类除private修饰符修饰的属性,其他修饰符修饰的都可以继承。
==和equals 的区别是什么?
==是运算符号,equals是方法。==比equals运行速度快。
==对于基本数据类型是值比较,对于引用类型是引用比较,equals本质是引用比较,被Integer、String、Date重写equals方法就变成的值比较。
collection与collections的区别?
Collection是一个集合接口,提供集合对象基本操作通用接口方法。
Collections是一个工具类,提供一系列静态方法对于集合元素进行排序、搜索、线程安全操作
java中异常处理的过程?
try{}中放可能出现异常的代码catch{}对捕获异常的处理。
throw真实抛出一个异常、throws声明将要抛出一个异常。谁调用谁处理
java中Error与Exception的区别?
Error是错误,不可处理。Exception是异常,可捕获处理。
解释java中异常处理常用的关键字的作用?
try、catch、throw、throws、finally
try包含可能出现异常的保护代码
catch捕获保护代码的异常。
throw明确抛出一个异常。
throws声明可能抛出任何异常。
finally确保无论出现什么异常,都被执行的一段代码。
String、StringBuffer 与StringBuilder 之间区别?
String不可变字符串,每次操作都会产生一个新的字符串,指针将指向新的字符串。
StringBuffer和StringBuilder继承自AbstractStringBuilder是可变字符串,内部有自动扩容机制。
StringBuffer是线程安全,StringBuilder是线程非安全。
执行效率:StringBuilder>StringBuffer>String
list. Set. Map之间的区别是什么?
HashMap和Hashtable有什么区别?
HashMap继承自AbstractMap。
Hashtable继承自Dictionary。
HashMap支持key-value为null,Hashtable不支持key-value为空。
HashMap非线程安全,Hashtable线程安全。
HashMap初始容量为16,每次扩容2倍,Hashtable初始容量为11,内次扩容2n+1。
HashMap的原理
HashMap基于Hash算法实现,put(key-value)存储,get(key)获取。
ArrayList和LinkedList 的区别是什么?
ArrayList是动态数组数据结构实现,LinkedList是双向链表数据结构实现。
ArrayList比LinkedList随机访问效率高。
频繁读取集合数据使用ArrayList,插入和删除数据使用LinkedList。
java中字节流与字符流的区别?
字节流以8位2进制字节输入输出,字符流以16位2进制字符输入输出。字节流可以传输任何形式的文件,字符流只能传输文本文件
字节输入流InputStream,字节输出流OutputStream
字符输入流reader,字符输出流writer
说一说tcp协议的3次握手?
Tcp三次握手客户端服务器建立连接,可以保证通信传输的安全,减少内存消耗。
动态代理是什么?有哪些应用?怎么实现动态代理?
运行时动态生成的代理类,SpringAop、hibernate数据查询
jdk原生动态代理、cglib动态代理
jdk动态代理,cglib动态代理
jdk原生动态代理基于接口, 基于当前类的子类。
JSP和servlet 有什么区别?
Servlet是运行在服务器上,处理用户请求做出相应的java程序。
Jsp是在HTML文件中嵌套java程序形成的一种页面。
Servlet主要用于逻辑控制,jsp侧重于视图。
servlet生命周期
实例化、初始化、处理请求、销毁
次数 | 地址栏 | 数据共享 | 效率 | / | ||
---|---|---|---|---|---|---|
forward | 转发 | 1 | URL地址栏不会变 | 共享Request里数据 | 效率高 | 可有可无 / |
rediret | 重定向 | 2 | URL地址栏会变 | 不共享数据 | 效率低 | 一定不能有 / |
java中什么是序列化和反序列化,如何操作?
序列化:将java对象转换成字节序列。
反序列化:将字节序列转换成java对象。
把内存中的对象状态保存到文件中或者数据库中、用套接字网络上传输对象、通过RMI传输对象。
什么是多线程,有几种创建方式,有什么区别?
一个程序至少一个进程,一个进程至少一个线程或者多个线程,多个线程就是多线程。
继承Thread类、实现Runnable接口、实现Callable接口。
继承Thread类和实现Runnable重写run方法返回的是void,返回值为null。
实现Callable接口和创建线程池重写call方法,返回Object,有返回值。
线程池的创建方式?
newSingleThreadExecutor、newCachedThreadPool、newFixedThreadPol、newSingleThreadSchedExecutor、newScheduledThreadPool、newWorkstealingPool、ThreadPoolExecutor
线程中sleep方法与wait方法的区别?
Sleep来自Thread,wait来自Object。
Sleep 释放锁,wait会释放锁。
Sleep时间到会自动恢复,wait需要调用notify()或者notifyAll()唤醒线程。
说一说线程中的生命周期?
新建、就绪、运行、阻塞、死亡
线程状态:初始、运行、阻塞、等待、超时等待、死亡
什么是线程同步,为什么会有线程同步,具体的实现方式有几种?
线程同步:当一个线程对内存操作时,其他线程不能对这个内存地址进行修改,直到该线程完成操作,其他线程才可以对该内存进行操作。
当多线程同时读写一份共享数据资源时,可能会发生冲突,这时需要使用线程同步。
同步方法、同步代码块、使用volatile、使用重入锁、使用局部变量。
什么是TCP,什么是UDP,他们各自的优缺点是什么?
TCP和UDP是OSI模型中运输层中的协议。
TCP面向连接,UDP面向非连接。
TCP提供可靠的传输,UDP无法保证传输安全。
TCP面向字节,UDP面向报文。
TCP传输效率慢,UDP传输效率快。
什么是反射,如何得到一个java类的反射对象?
在运行状态中对于任意一个类都能够知道这个类中的属性和方法,对于每个对象都可以调用它的任何属性和方法。这种动态获取信息和动态调用方法就是反射。
Class.getClass();
什么是泛型?
不确定的数据类型<>表示定义
RequestDispatcher与sendRedirect的区别?
次数 | 地址栏 | 数据共享 | 效率 | / | ||
---|---|---|---|---|---|---|
forward | 转发 | 1 | URL地址栏不会变 | 共享Request里数据 | 效率高 | 可有可无 / |
rediret | 重定向 | 2 | URL地址栏会变 | 不共享数据 | 效率低 | 一定不能有 / |
get与post的区别?
get被浏览器主动缓存,post不会被浏览器缓存。
get参数被明文限制URL上不安全,post参数传输安全。
get传输参数大小有限制,post传输参数大小没有限制。
JSP中的9大内置对象分别是什么?
Request、response、session、application、pageContext、page、out、config、exception
session和cookie区别
嵌套resultMap、嵌套select
ORM 核心对象 动态SQL
Dao 接口就是Mapper接口,接口的全限名就是映射文件中namespace,接口方法名就是接口Mapper的Statement的id值,接口方法内的参数就是传给SQL的参数。
不能重载。因为使用全限名+方法名的保存寻找策略。Mapper接口的工作原理是JDK动态代理,MyBatis运行时会使用JDK动态代理,Mapper接口生成代理对象proxy,代理对象会拦截接口方法转而执行MapperStatement所代表的SQL,然后返回SQL执行结果。
一级缓存:基于PerpetualCache的HashMap的本地缓存,它的声明周期和SQLSession一致,当有多个SQLSession或者分布式的环境中数据库操作可能会出现脏数据。当Session flush或close后,该Session中所有Cache将清空,默认开启一级缓存。
二级缓存:也是基于perpetualCache的Mapper本地缓存,存储作用域为Mapper级别,多个SQLSession之间需要共享缓存,需要使用二级缓存,二级缓存可自定义存储源。
#{}与${}之间的区别
#{}是预编译处理(占位符)可以防止SQL注入,${}字符串替换
为什么要使用spring?
FactoryBean与BeanFactory
两个都是接口
FactoryBean是一个bean,也归BeanFactory管理
BeanFactory是spring顶层接口,返回的是一个工厂。
Spring的loc是什么?
Spring IOC控制反转是spring的核心,负责控制对象的生命周期和对象间的关系。
构造方法注入、setter注入、注解注入
说一下spring mvc运行流程?
前置控制器 DispatcherServlet。
映射控制器 HandlerMapping。
处理器 Controller。
模型和视图 ModelAndView。
视图解析器 ViewResolver。
什么是AOP,为什么要使用AOP,常见的AOP的实现方式有几种分别是什么?
什么是spring cloud?
SpringCloud是一个微服务框架,是一系列框架的有序集合。
Spring Boot、Spring MVC和Spring 有什么区别?
Redis是一个开源基于C语言编写、高速缓存、支持网络、基于内存可持久化日志型、高性能key-value存储的数据库。
数据类型 | 结果存储的值 | 结构读写能力 |
---|---|---|
String | 可以是字符串、整数或者浮点数 | 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement) |
List | 一个链表,链表上的每个节点都包含了一个字符串 | 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素 |
Set | 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 | 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素 |
Hash | 包含键值对的无序散列表 | 添加、获取、移除单个键值对;获取所有键值对 |
Zset | 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 | 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素 |
Solr是基于Lucene(全文检索引擎)开发,它是一个独立系统,运行在Tomcat或Jetty上。
Spring security是什么,说说他的执行原理。
security是Spring中提供安全认证服务框架
常见的消息中间有哪些,ActiveMQ 发送消息的原理?
RabbitMQ、RocketMQ、ActiveMQ、Kafka
介绍一下你简历中最熟悉的一一个项目?
在完成这个项目的时候你使用了哪些主要的技术?
在完成这个项目的过程中你得到了哪些?.
你在项目开发的过程中是是怎么调优的?说说你们公司开发软件的具体流程是什么样的?
如何进行SQL调优?
避免全表扫描
避免索引失效
避免排序,不能避免,尽量选择索引排序
避免查询不必要的字段
避免临时表的创建,删除
你们公司开发软件的时候有哪些文件?
Dubbo里面有哪几种节点角色?
tion)计划必要的活动和所需资源,具体确定功能并设计构架 。
如何进行SQL调优?
避免全表扫描
避免索引失效
避免排序,不能避免,尽量选择索引排序
避免查询不必要的字段
避免临时表的创建,删除
你们公司开发软件的时候有哪些文件?
Dubbo里面有哪几种节点角色?