java 问题

 
 * 1方法的重写(override/overwrite)
 * 
 * 1.重写:子类继承父类以后,可以对父类中的方法进行覆盖操作。
 * 2.应用:重写以后,当创建子类对象以后,通过子类对象去调用子父类中同名同参数方法时,执行的是子类重写父类的方法。
 *   即在程序执行时,子类的方法将覆盖父类的方法。
 * 
 * 面试题:区分方法的重载与重写(有的书也叫做“覆盖”)
 *         答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。
 *         重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
 *         如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
 *         子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
 *         如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
 * 

/*
 * 2单例设计模式:
 * 1.所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例
 *  
 * 2.如何实现?
 *   饿汉式    VS    懒汉式
 * 
 * 3.区分饿汉式和懒汉式。
 *        饿汉式:坏处:对象加载时间过长。
 *                 好处:饿汉式是线程安全的。
 * 
 *   懒汉式:好处:延迟对象的创建。
 *                坏处:目前的写法,会线程不安全。---》到多线程内容时,再修改
 

//单例的饿汉式

 * 3面试题:常见的异常有哪些?举例说明
java异常体系结构
 * 
 * java.lang.Throwable
 *         |----java.lang.Error:一般不编写针对性的代码进行处理
 *         |----java.lang.Exception:可以进行异常处理
 *             |----编译时异常(checked)
 *                 |----IOEXception
 *                     |----FileNotFoundException
 *                 |----ClassNotFoundException
 *             |----运行时异常(unchecked)
 *                 |----NullPointerException
 *                 |----ArrayIndexOutOfBoundsException
 *                 |----ClassCaseException
 *                 |----NumberFormatException
 *                 |----InputMismatchException
 *                 |----ArithmaticException
 * 

程序(program):为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。
进程(process):程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有它自身的产生、存在和消亡的过程。——生命周期
如:运行中的QQ,运行中的MP3播放器程序是静态的,进程是动态的
进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域
线程(thread),进程可进一步细化为线程,是一个程序内部的一条执行路径。
若一个进程同一时间并行执行多个线程,就是支持多线程的
线程是调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开销小
一个进程中的多个线程共享相同的内存单元/内存地址空间—》它们从同一堆中分配对象,可以访问相同的变量和对象。这就使得线程间通信更简便、高效。但多个线程操作共享的系统资源可能就会带来安全的隐患。

1.进程是资源分配的基本单位,线程是CPU调度和分派的基本单位

2.线程是进程的一部分,一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程

3.每个进程都有独立的代码和数据空间(程序上下文),程序间的切换开销大,
线程可看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程间切换开销小

4.在操作系统中能同时运行多个进程(程序)
/**
 * 4 比较创建线程的两种方式。
 *  开发中:优先选择:实现Runnable接口的方式
 *  原因:1. 实现的方式没有类的单继承性的局限性
 *       2. 实现的方式更适合来处理多个线程有共享数据的情况。
 *  
 *  联系:public class Thread implements Runnable
 *  相同点:两种方式都需要重写run(),将线程要执行的逻辑声明在run()中。
 */
 

/** 5面试题:如何解决线程安全问题?有几种方式
 * 解决线程安全问题的方式三:lock锁---》JDK5.0新增

 *
 * 注意:如果同步代码有异常,要将unlock()写入finally语句块
 *
 * 6. 面试题:synchronized 与 Lock的异同?
 *    相同:二者都可以解决线程安全问题
 *    不同:synchronized机制在执行完相应的同步代码以后,自动的释放同步监视器
 *         Lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())
 *
 * 2.优先使用顺序:
 *      Lock 同步代码块(已经进入了方法体,分配了相应资源)同步方法(在方法体之外)
 * /**
 * 7面试题:sleep() 和 wait()的异同?
 * 1.相同点:一旦执行方法,都可以使得当前的线程进入阻塞状态。
 * 2.不同点:1)两个方法声明的位置不同:Thread类中声明sleep() , Object类中声明wait()
 *          2)调用的要求不同:sleep()可以在任何需要的场景下调用。 wait()必须使用在同步代码块或同步方法中
 *          3)关于是否释放同步监视器:如果两个方法都使用在同步代码块或同步方法中,sleep()不会释放锁,wait()会释放锁。
 */
8callable和runnable区别
1、最大的区别,runnable没有返回值,而实现callable接口的任务线程能返回执行结果
2、callable接口实现类中的run方法允许异常向上抛出,可以在内部处理,try catch,但是runnable接口实现类中run方法的异常必须在内部处理,不能抛出


 * 9 创建多线程的方式四:使用线程池
 * * 面试题:创建多线程有几种方式?四种!
 * 好处:
 *      1.提高响应速度(减少了创建新线程的时间)
 *      2.降低资源消耗(重复利用线程池中线程,不需要每次都创建)
 *      3.便于线程管理
 *          corePoolSize:核心池的大小
 *          maximumPoolSize:最大线程数
 *          keepAliveTime:线程没有任务时最多保持多长时间后会终止
 *


 * 10 String、StringBuffer、StringBuilder三者的异同?
 *
 * String:不可变的字符序列;底层使用char[]存储
 * StringBuffer:可变的字符序列;线程安全的,效率低;底层使用char[]存储
 * StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
 *
 */
/**
 * 11一、集合的框架
 *
 * 1.集合、数组都是对多个数据进行存储操作的结构,简称Java容器。
 *   说明;此时的存储,主要是指能存层面的存储,不涉及到持久化的存储(.txt,.jpg,.avi,数据库中)
 *
 * 2.1数组在存储多个数据封面的特点:
 *      》一旦初始化以后,它的长度就确定了。
 *      》数组一旦定义好,它的数据类型也就确定了。我们就只能操作指定类型的数据了。
 *      比如:String[] arr;int[] str;
 * 2.2数组在存储多个数据方面的特点:
 *      》一旦初始化以后,其长度就不可修改。
 *      》数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便,同时效率不高。
 *      》获取数组中实际元素的个数的需求,数组没有现成的属性或方法可用
 *      》数组存储数据的特点:有序、可重复。对于无序、不可重复的需求,不能满足。
 *
 */
* 12、Map的实现类的结构:
 *  |----Map:双列数据,存储key-value对的数据   ---类似于高中的函数:y = f(x)
 *         |----HashMap:作为Map的主要实现类;线程不安全的,效率高;存储null的key和value
 *              |----LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历。
 *                      原因:在原有的HashMap底层结构基础上,添加了一对指针,指向前一个和后一个元素。
 *                      对于频繁的遍历操作,此类执行效率高于HashMap。
 *         |----TreeMap:保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序
 *                      底层使用红黑树
 *         |----Hashtable:作为古老的实现类;线程安全的,效率低;不能存储null的key和value
 *              |----Properties:常用来处理配置文件。key和value都是String类型
 *
 *
 *      HashMap的底层:数组+链表  (jdk7及之前)
 *                    数组+链表+红黑树 (jdk 8)
 *
 *  面试题:
 *  1. HashMap的底层实现原理?
 *  2. HashMap 和 Hashtable的异同?
 *  3. CurrentHashMap 与 Hashtable的异同?(暂时不讲)
 *
 */Collections工具类
操作数组的工具类:Arrays
Collections 是一个操作Set、List和Map 等集合的工具类
Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法
排序操作:(均为static方法)
reverse(List):反转List 中元素的顺序
shuffle(List):对List集合元素进行随机排序
sort(List):根据元素的自然顺序对指定List 集合元素按升序排序
sort(List,Comparator):根据指定的Comparator 产生的顺序对List 集合元素进行排序
swap(List,int,int):将指定list 集合中的i处元素和j 处元素进行交换

 * 面试题:Collection 和 Collections的区别?
 *       Collection是集合类的上级接口,继承于他的接口主要有Set 和List.
 *       Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作.
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值