java基础知识

一: 
1.机器语言,汇编语言,高级语言的特点及其优劣
机器语言:优点:执行速度快,占内存少  缺点:不易读懂,可移植性差,易错,难记忆
汇编语言:优点:执行速度快,占内存少  缺点:可移植性差
高级程序语言:优点:易读懂,更贴近于自然语言,可移植性好,易学 缺点:执行速度相对慢,占空间多


2.什么是面向对象程序设计(OOP)
OOP面向对象程序设计,是以建立模型体现出来的抽象思维过程和面向对象方法

3.什么是结构化程序设计,什么是面向对象程序设计,两者的区别是什么
结构化程序设计是面向过程的程序设计方法,强调开发软件的合理性,开发方法的合理性。
面向对象程序设计是面向对象的程序设计方法,对象是数据与容许的操作组成的封装体,与客观实体直接对应的关系。
区别:结构化程序设计是分析解决问题所要的步骤,然后用函数把这些步骤一一实现,再依次调用即可。
面向对象把构成问题的事务分解成各个对象,对象的目的不是为了完成一个步骤,而是为了描述某个事务在整个解决问题的步骤的行为。
所以面向对象是高度实体的抽象化,面向过程是自底向下的编程。

4.instanceof运算符的作用
是为了判断对象想否是对应的类,左边的操作是一个对象,右边是一个类,,当左边对象是右边的类或子类所创建的对象的时候,返回true,否则false

5.什么是数组
是相同类型变量按顺序组成复合数据类型。

二:
6.面向对象程序的基本概念
是基于对象的编程,编写的程序更加健壮,强大,易维护,易扩展,易复用
有封装性:将数据和数据的操作封装在一起,通过抽象,形成一般概念
继承性:子类继承父类功能,又可以增加子类独有的数据和数据操作
多态性:两种意义,一种是操作上的多态,有多个操作具有相同的名字,但接收的消息类型必须不同
另一种和继承有关的多态,是指同一个操作被不同类型对象调用时可能产生的不同行为

7.什么是方法重载,什么是方法重写,两者的区别
方法重载是一个类中可以有多个方法具有相同的名字,但这些方法的参数必须不同,即或者是参数的个数不同,或者参数的类型不同
方法重写是在子类中定义一个方法,这个方法的类型和父类的方法类型一致,或者是父类方法类型的子类型,并且这个方法的名字,
参数个数,参数类型和父类方法完全相同。

重写和重载的区别:重载是定义相同的方法名,参数不同,重写是子类重写父类的方法;重载是在一个类中,重写是子类与父类之间;
重载是编译时的多态性,重写时运行时的多态性。

8.super关键字
子类可以隐藏从父类继承的成员变量和方法,如果子类中想使用被隐藏的成员变量或方法,可以用super

9.抽象类的特点
abstract对象只允许声明,不允许实现
abstract类中可以有abstract类方法,也可以有非abstract方法
abstract不能用new运算符创建对象
abstract类的子类,可以重写父类方法,也可以继承父类
abstract类的对象作上转型对象

(1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。
(2)抽象类不能用来创建对象;
(3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。


10.什么是接口的回调?
是指可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用
被类重写的接口方法以及接口中的default方法

11.什么是内部类,什么是匿名类
内部类:在一个类种声明另一个类
匿名类:java允许用户直接使用一个类的子类创建一个子类对象,在创建子类对象时,除了使用父类的构造方法
还有类体,此类体去掉声明后的类体成为匿名类

12.什么是自动装箱拆箱
自动装箱允许把一个基本数据类型的值直接赋给基本数据类型相对的类实例
自动拆箱允许把基本数据类型对应类的实例直接赋给相应的基本数据类型变量,或者把基本数据类型相对应的类
实例当作相应的基本数据类型来使用

三:
13.什么是模块化程序设计思想
是指在进行程序设计时,将一个大程序按照功能划分为若干小程序模块,每个小程序模块完成一个确定的功能,
并在这些模块之间建立必要的联系,通过模块的相互协作完成整个功能的程序设计方法
基本思想:自顶向下,逐步求精,分而治之

14.参数传送,变量作用域,变量生存时间
(1)参数传送:按值传递,按地址传递
(2)变量的作用域分为四个级别:类级(全局),对象实例级(成员变量),方法级(局部变量),块级(块内部变量)
(3)成员变量:与实例对象共存亡,静态变量:与类共存亡,局部变量:与方法共存亡

15.函数的递归和迭代
(1)递归:通过方法调用,将输入条件推向边界条件,然后再由边界条件,反方向积累或累加得到最后结果
(2)迭代:诸如for while do...while都是迭代

四:
16.类与类之间的关系有哪些
(1)泛化:是一种继承关系,表示一般和特殊关系,指定子类如何特化父类的所有特征和行为
(2)实现:是一种类与接口的关系,表示类是接口所有特征和行为的实现
(3)关联:一种拥有关系,使一个类知道另一个类的属性和方法
(4)聚合:整体和部分关系,部分可以独立于整体
(5)组合:整体与部分关系,部分不可以独立于整体
(6)依赖:一种使用关系,即一个类需要另一个类协助,所以尽量不要相互依赖
强弱关系:泛化=实现>组合>聚合>关联>依赖

17.设计模式是什么,什么是单例模式,工厂方法,抽象方法和原型
(1)设计模式是针对一类问题的最佳解决方案,且被应用于许多系统中,是从许多优秀软件系统中总结出来的成功的,可复用的方案
(2)单例模式:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,保证全局对象的唯一性。
特点:只有一个实例,必须自己创建自己的唯一实例,必须给所有其他对象提供这一实例
(3)工厂方法:是一个用于创建对象的接口,让子类决定实例化哪一个类,使一个类的实例化延迟到其子类。
优点:让用户的代码和某个特定类的代码解耦;是用户不必知道它所使用的对象是怎样被创建的,只需要知道对象有哪些方法即可。
(4)抽象方法:抽象工厂模式提供一个创建一系列相关或相互依赖的接口,无需指定其他子类
优点:具体产品在应用层代码隔离,无需关系创建细节;将一系列的产品族同一到一起创建
(5)原型:用一个已经创建的实例作为原型,通过复制该原型对象创建一个和原型对象相同的新对象。
实现:在JAVA的cloneable接口中的拷贝机制,在Object类中提供的clone()方法。


五:
18.String Buffer类是什么
String Buffer类可以修改字符序列,即该类对象实体内存可自动改变大小

19什么是StringTokenizer
当分析一个字符序列并将字符序列分解成可被独立使用的单词时,可用StringTokenier类,构造该类的对象是一个字符序列分析器

20.正则表达式,Pattern类,Matcher类
一个正则表达式是含有一些具有特殊意义字符的字符序列,这些特殊字符称为正则表达式中的元字符。
对于pattern和matcher:匹配模式是检测和指定模式的字符序列。java提供Pattern类和Macther类进行模式匹配,
由Matcher类的对象直接检索出和pattern类的对象匹配的String对象。
Pattern 一个Pattern是一个正则表达式经编译后的表现模式。
 Matcher 一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。


六:
21.什么线程,什么是进程
(1)进程是程序的一次动态执行的过程,它对应了从代码加载,执行至执行完毕的一个完整的过程,这个过程也是进程从产生,发展至消亡的过程。
(2)线程是比进程更小的执行单位。一个进程在其执行过程中可以产生多个线程,形成多条执行线索,每条线索,即每个线程都有它产生,存在,消亡
的过程,也是一个动态的概念。线程间可以共享相同的单元,并利用这些共享单元来实现数据交换,实时通信与必要的同步操作。多线程程序可以更好的
表达和解决问题。

22.进程与线程的区别
线程和进程是计算机操作系统程序运行的基本单位。系统利用该单位实现系统对应用的并发性。进程和线程的区别在于
一个程序至少有一个进程,一个进程至少有一个线程,线程的划分小于进程,使得多线程的并发性高。进程在执行时,
拥有一个独立的内存单元,而多线程共享内存,使得程序运行效率极大的提高。

23.java的多线程
就是在操作系统每次分时给java程序一个时间片的cpu的时间内,在若干个独立的可控制的线程之间进行切换。如果机器
有多个cpu处理器,那么JVM就能充分利用这些CPU使得java程序在同一时刻能获得多个时间片,java可获得真实的并发执行效果。

24.线程状态与生命周期
(1)新建状态(new)线程尚未启动 (2)可运行(就绪)状态(runnable),调用start()方法
  (3)运行状态Running 线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态
(4)中断状态(阻塞状态)(blocked,waiting,timed_waiting)线程中断
(5)死亡状态(terminated)一个线程完成全部工作 进入死亡状态

25.线程的调度
1)start()启动线程,进入runnable状态,一旦使用到CPU开始独立的生命周期。
2)run()系统的自动调度;run()中的功能和方法
3)sleep(int millsecond):放弃CPU资源,休眠一段时间,必须在try...catch中使用
4)isAlive():线程处于new()状态,进入terminated后为,false;进入start()后为true
5)currenetThread()是Thread中的static方法,返回cpu线程的引用
6)interrupt():吵醒睡眠,终止休眠

26.sleep和yield的区别
(1)sleep方法暂停当前线程后,会给其他线程执行集合,不会理会线程的优先级。但yield会给优先级相同或高优先级的线程执行机会。
(2)sleep方法会将线程转入阻塞状态,直到经过阻塞时间才会转到就绪状态,而yield则不会将线程转入到阻塞状态,它只是强制当前
线程进入就绪状态,因此完全有可能调用yield方法暂停后,立即再次获得处理器资源继续进行。
(3)sleep生命抛出了InterruptedException异常,所以调用sleep方法时,要么捕获异常,要么抛出异常,而yield没有申明抛出异常。

27.线程同步,互斥
互斥:当一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。
同步:两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行。

同步保证了线程运行的顺序性,互斥保证了线程运行的安全性。
同步是一种更为复杂的互斥,而互斥是一种特殊的同步。
互斥具有唯一性和排它性,访问是无序的。

由于线程共享进程的资源和地址空间,所以在访问到他们的公共资源的时候,一定会出现线程的同步和互斥现象,
多线程访问一个数据的次序一定是杂乱无章的,所以我们引入互斥锁保证在某一端时间内只有一个线程在执行某些代码,
条件变量完成同步过程。

28.Thread和runnable的区别
Thread是继承Thread类,runnable是实现Runnable接口;
启动线程Thread是子类对象.start(),启动Runnable是传入目标对象+Thread对象.start()
因为java是单继承,所有使用Thread有局限性,使用runnable可以避免这个缺点
所有runnable更有优势。

七。
29.java I/O流
(1)FileInputStream类创建的对象被称为文件字节输入流。
输入流打开一个到达文件的输入流
(2)FileOutputStream类创建的对象被称为文件字节输出流。
FileOutputStream顺序读写文件,只要不关闭流,每次调用write方法就顺序的向文件写入
内容,直到流被关闭
(3)BufferedReader和BuffferedWriter流的对象,称为缓冲输入流,输出流
二者的源和目的地必须是字符输入流和字符输出流、BufferedReader可以按行读写文件
(4)DataInputStream和DataOutputStream称为数据输入流,数据输出流
DataInputStream:创建的数据输入流指向一个由参数in指定的底层输入流
DataOutputStream:创建的数据输出流指向一个由参数out指定的底层输入流
(5)Reader和Writer类是字符输入流,输出流,它和InputStream类的区别是:InputStream类是一个字节流,以byte为单位读取;
而Reader类是一个字符流,以char为单位读取。

30.File类
file对象主要用来获取文件本身的一些信息,如文件所在目录,文件长度,文件读写权限等,不涉及文件的读写操作

31.随机流
java专门用来处理文件输入,文件输出功能的更加完善的RandomAccessFile类,成为随机流访问文件。既可以作为源,也可作为目的地
在使用随机流的时候,要输入读写权限,决定创建流对文件的读写权限。
RandomAccess类中有一个seek(long a)方法,用来定位随机流读写位置,a决定读写位置距离文件开头的字节个数。
另外还可以用getFilePinter()方法获取文件读写位置

32.序列化和反序列化
序列化:将java文件装换成二进制数据流的过程
反序列化:将序列化过程生成的二进制数据流转为java对象
主要目的:通过网络传输java对象,将java对象保持在本地文件系统数据库
序列化步骤(1)创建类,实现Serializable(2)当前类提供一个全局变量(3)使用对象流ObjectOutputStream进行序列化

八。
33.java的集合框架
(1)Set<>是一个可存储String的数据集合,set可调用add(String s)方法将String数据加到集合里,称做集合的元素。
集合里不允许有重复元素。
(2)list集合代表了有序重复集合,可直接根据元素的索引访问。
Arraylist:是一个动态数组,允许任何符合规则的元素插入甚至包括null,会随着元素的增加,大小也会增加。
擅长于随机访问,同时是非同步的。
Vector:与Arraylist相似,但是是同步的。
(3)Map:用于保持具有映射关系的数据,Map里保存着两组数据:key和value,可以引用任何数据类型,但key不重复

34.java的排序
(1) 插入排序:插入排序基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、
个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入排序的基本思想是:每
步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
(2) 选择排序:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小
(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
(3)冒泡排序:冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,
一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端。
(4)快速排序:快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,
以此达到整个数据变成有序序列。
(5)堆排序
(6) 归并排序:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
(7) 希尔排序:希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。
希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,
每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
(8)基数排序


35.泛型及其应用
泛型主要目的是建立具有类型安全的集合框架,如链表,散列映射等数据结构

九:
36.java反射概念
java反射是指一个机制,就是把java类的各种成分映射到一个个的java对象,
在运行过程中,对任意一个类,都能知道类的所有属性与方法;对任意一个对象,能够调用它任意一个方法与属性;
这种动态获取信息和动态调用对象的方法就叫做java语言的反射机制
java反射机制主要提供的功能:(1)运行时判断任意对象所属类;(2)运行时构造任意一个类的对象
(3)在运行时判断任意一个类具有和成员变量和方法(4)在运行时调用任意一个对象方法(5)生成动态类

主要指程序可以访问、检测和修改自身状态
37.反射机制应用场景:
(1)逆向代码,如反编译(2)与注解相结合的框架(3)单纯的反射机制框架(4)生成动态类
获取 Class 对象
获取类中的所有字段
获取类中的所有构造方法
获取类中的所有非构造方法

38.垃圾回收器
java垃圾回收器:java不需要手动将将垃圾回收,而是将运行时产生的垃圾交给JVM处理回收
主要有串行回收器,吞吐量优先回收器,响应时间优先的回收器,GI垃圾回收器

39.内存分配策略
一般有三种:静态的,栈式的,堆式的。
静态存储:指编译时就能够确定每个数据目标在运行时的存储空间需求,因而编译时就可以给他们分配固定的存储空间。(不允许可变数据结构出现)
栈式存储:是动态存储分配,是一个由类似堆栈的运行栈来实现,和静态存储分配相反。(存储过程中,程序只有运行时才知道数据区,是先进后出的分配)
堆式存储:专门辅助在编译或运行时,无法确定存储要求的数据结构的内存分配

40.虚拟机类加载机制
(1)java文件从编码完成到最后执行,有两个过程。编译:通过javac命令将java文件编译成字节码。
运行:把编译声称的.class文件交给java虚拟机(JVM)执行

类加载的过程就是JVM虚拟机把class文件类信息加载进内存,解析生成对应的class对象过程

重点(2)java虚拟机把描述类的数据从Class文件加载到内存并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型
这个过程被称为java类加载机制。

(3)java语言中类的加载,连接和初始化过程都是在程序运行过程期间完成的。
(4)过程:加载 验证 准备 解析 初始化 使用 卸载

十,
41.算法的评定标准
正确性,友好型,可读性,健壮性
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值