JAVA基础题

1、说说&和&&的区别
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
&&具有短路功能,即如果第一个表达式为false,则不需要计算第二个表达式。
&还可以用作位运算符,当&操作符两边的表达式不是boolean类型是,&表示按位与操作。

2、Java规范有这样的规则
a.高位转低位需要强制转换.
b.低位转高位自动转.

Java规范有这样的规定
复合赋值(E1 op=E2)等价于简单赋值(E1=(T)((E1) op (E2)))
使用复合赋值操作符时 : 复合赋值表达式自动地将所执行计算的结果转型为其左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。

3、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

4、什么叫线程安全?servlet是线程安全的嘛?
线程安全就是多线程在运行期间不会产生不符合常规的数据,同样在多线程访问同一代码,不会产生不确定的结果。
Servlet是线程不安全的。

5、同步有几种实现方法
两种,分别是:synchronized和wait与notify

6、请说明下java的内存模型及其工作流程
java内存模型就是 java内存分为主内存和工作内存。
多线程 每一个线程都会有一个自己的工作内存,所使用到的变量都是主内存的一份拷贝。

7、volatile有什么用?能否用一句话说明下vplatile的应用场景?
volatile的作用就是多线程使用同一个变量时,每次都去主内存读数据,保障了数据的实时性。
应用场景就是多线程 操作同一个变量。

8、多线程执行怎么保障变量的可见性?
可见性:就是一个线程修改了变量,其他线程可以立即知道
保证可见性的方法:volatile
synvhronized(unlock之前,写变量值会主存)
final(一旦初始化完成,其他线程就可见)

9、为什么代码会重排序?
代码重排序是为了CPU的高效率执行
JVM指令重排的基本原则
-程序顺序原则:一个线程内保证语义的串行性
-volatile原则:volatile变量的写,先发生于读
-锁原则:解锁必然发生在随后的加锁前
-传递性:A先于B,B先于C,那么A必然先于C
-线程的start方法先于它的每一个动作
-线程的所有操作先于线程的终结(Thread.join())
-线程的中断(interrupt())先于被中断线程的代码
-对象的构造函数执行结束先于finalize()方法

10、抽象类和接口有什么区别
–接口是公开的,里面不能有私有的方法或变量,适用于让别人使用的,而抽象类是可以有私有方法或私有变量的。
–实现接口一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
–接口可以实现多重继承,而一个类只能继承一个父类,但可以通过多个接口实现多重继承。
–接口还有表示和数据共享的作用。

11、反射的用途及实现
Java反射机制主要提供了以下功能:在运行是构造一个类的对象;判断一个类所具有的成员变量和方法;调用一个对象的方法;生成动态代理。

反射最大的应用就是框架。

Java反射的主要功能:

  • 确定一个对象的类
  • 取出类的modifiers,数据成员,方法,构造器和父类
  • 找出某个接口里定义的常量和方法说明
  • 创建一个类实例,这个实例在运行时刻才有名字(运行时间才生成的对象)
  • 取得和设定对象数据成员的值,如果数据成员名是运行时刻确定的也能做到
  • 在运行时刻调用动态对象的方法
  • 创建数组,数组大小和类型在运行时刻才确定,也能更改数组成员的值

反射的应用很多,很多框架都有用到

  • spring 的 ioc/di 也是反射
  • javaBean 和 jsp 之间调用也是反射
  • struts 的 FormBean 和页面之间也是通过反射调用
  • JDBC的classForName()也是反射
  • hibernate的find(Class class)也是反射

反射还有一个不得不说的问题,就是性能问题,大量使用反射系统性能大打折扣。怎么使用是你的系统达到最优就看你系统架构和综合使用问题。

12、session和cookie区别
cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。

无论客户端浏览器怎么样设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session任然能够工作,因为客户端无法禁用服务端的session。

13、sleep()、join()、yield()有什么区别

  1. sleep()方法
    在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。让其他线程有机会继续执行,但它不释放对象锁。也就是如果有Synchronized同步块,其他线程任然不能访问共享数据。该方法要注意捕获异常。

sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行的机会。

2.yield()方法
yield()方法也不会释放锁,但它没有参数,即yield()方法只是使当前线程重新回到可执行状态,所以执行yield()线程有可能在进入到可执行状态后马上又被执行,另外yield()方法只能使同优先级或者高优先级的线程得到执行机会。

3.join()方法
Thread 的非静态方法join()让一个线程B‘加入’到另一个线程A的尾部。在A执行完毕之前,B不能工作。

保证当前线程停止执行,直到该线程所加入的线程完成为止。然而如果它加入的线程没有存活,则当前线程不需要停止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java核心面试技术点 线程 单例模式下的线程安全http://blog.sina.com.cn/s/blog_75247c770100yxpb.html map集合 集合数据结构及方法的使用 多线程 线程进程 线程状态 线程状态的改变 sql :临时表、游标、存贮过程、触发机制http://www.cnblogs.com/SkySoot/archive/2012/04/09/2439190.html jvm工作原理 JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。 1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为本地机器码执行。 内存泄露是一部分内存无法回收。溢出是说内存不够用了。泄露可能在将来会导致溢出 当对象在程序中不会被使用,但却有其他对象持有该对象时会发生溢出。比如出现持有的环的情况。 java并发面试 .内存存储锁控制 http://blog.csdn.net/geolo/article/details/8670900 4.请说明下java的内存模型及其工作流程。 答:Java把内存划分成两种:一种是栈内存,一种是堆内存。 栈内存:存放对象:函数中基本类型的变量和对象的引用变量、静态类方法 ;特点:栈有一个很重要的特殊性,就是存在栈中的数据可以共享。 堆内存:存放对象:用来存放由new创建的对象和数组;特点:在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。 java 内存模型 ( java memory model ):根据Java Language Specification中的说明, jvm系统中存在一个主内存(Main Memory或Java Heap Memory),Java中所有对象成员变量都储存在主存中,对于所有线程都是共享的。每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些对象成员变量的拷贝,线程对所有对象成员变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。 (1) 获取对象监视器的锁(lock) (2) 清空工作内存数据, 从主存复制对象成员变量到当前工作内存, 即同步数据 (read and load) (3) 执行代码,改变共享变量值 (use and assign) (4) 将工作内存数据刷回主存 (store and write) (5) 释放对象监视器的锁 (unlock) spring框架原理 10. spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值