小菜开始做个看书的积累,好好努力早日成为小富婆。
什么是B/S架构?什么是C/S架构?Browser/server只安装维护一个服务器,客户端采用浏览器(browse)来运行应用,就像4399,7k7k等,操作简单,内存占用少,越来越多人采用B/S架构。
Client/server,客户端和服务器端都需要具备,客户端需要按照专用的客户端软件支持应用。
Java都有哪些开发平台?JAVA SE:主要用在客户端开发,
JAVA EE:主要用在web应用程序开发
JAVA ME:主要用在嵌入式应用程序开发
什么是JDK?什么是JRE?JDK:java development kit ,java开发工具包,是开发人员所需要安装的环境
JRE:java requirement environment, java程序运行所需要安装的环境
我使用的是jdk1.8,jdk1.8与1.7的区别在于
Java语言有哪些特点?(1) 简单易学,有丰富的类(class)库
举例java的集合类
主要有list列表,set集,map映射
Java的包装类都是哪些?
基本数据类型包装类型byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharbooleanBoolean一个java类中包含哪些内容? 属性、方法、内部类、构造方法、代码块
(2) 面向对象(java最重要的特性,让程序耦合度更低,内聚性更高)
程序的耦合度(块间联系):子程序之间的相互关联性,也就是多个类之间的联系,可以根据修改的代价来判断,如果你把窗子安死在墙里,你要换个窗子的时候就需要修改墙,但如果你在设计的时候窗子统一规格,可以自由拆装,就可以降低修改的代价,从而降低耦合度。
程序内聚性(块内联系):指一个模块内部各个元素彼此结合的紧密程度的度量。内聚性越高,模块独立性越好。
(3) 与平台无关性(JVM是java跨平台使用的根本)
JVM(java virtual machine)跨平台的原理
([https://blog.csdn.net/lujiangui/article/details/82053129]{.underline})
面向对象和面向过程的区别?从解决问题模块:面向过程,函数(function);面向对象,对象(Object)。
从解决问题中心角度:面向过程,How,“如何做?”(流程封装为函数(Process encapsulation as function),"如何"就是过程,谁来做仅是参数);面向对象,Who,“谁来做?”("谁"就是对象,如何做是他自己的操作,多个对象协同完成任务(multiple objects are coordinated to conduct the task)。
从解决问题步骤角度:面向过程,先具体逻辑细节,后抽象问题整体;面向对象,先抽象问题整体,后具体逻辑细节。
面向过程:强调的是功能行为,功能执行的过程;面向对象:强调的是具备某些功能的对象。
什么是数据结构?计算机保存、组织数据的方式
JAVA的数据结构有哪些?线性表 链表 栈 队列 图 树
什么是OOP?面向对象编程
类与对象的关系?类是对象的抽象,对象是类的具体,类是对象的模板,对象是类的实例。
JAVA中有几种数据类型?整型byte,short,int,long 浮点型float,double 字符型char 布尔型boolean
标识符的命名规则标识符的含义:是指在程序中,我们自己定义的内容,譬如,类的名字,方法名称以及变量名称等等,都是标识符。
命名规则:(硬性要求)标识符可以包含英文字母,0-9的数字,$ 标识符不能以数字开头 标识符不是关键字 java关键字
命名规范:(非硬性要求)类名规范:首字符大写,后面每个单词首字母大写(大驼峰式)。
联想:JAVA的注释有三种,单行多行和文段注释 单行注释:快捷键Ctrl+/ 再次按撤销注释 一般用来注释局部变量 多行注释:Ctrl+shift+/ 撤销Ctrl+shift+ 可用来注释文件头、算法实现、方法中的复杂代码块、修改记录
文档注释:shift+alt+j 可用来注释类、接口、静态方法、成员方法、静态变量、成员变量、常量
Instanceof关键字的作用严格来说Java中的一个双目运算符,用来测试一个对象是否为一个类的实例 用法为:boolean result=obj instanceof class 其中obj为一个对象,Class表示一个类或者一个接口,当obj为Class的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回true,否则返回false。 注意:编译器会检查obj是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则通过编译,具体看运行时定。
什么是隐式转换,什么是显性转换?显示转换就是类型强转,把一个大类型的数据强制赋值给小类型的数据;
隐式转换就是大范围的变量能够接受小范围的数据;
显式转换和隐式转换其实就是自动类型转换和强制类型转换。
Char能不能转成int?能不能转成string?double?char在java中是比较特殊的,它的int值从1开始,一共有2的16次方个数据 char< int < long < float < double(范围依次增大) 所以char可以隐性转换为int和double,但不能隐性转为string。 如果char转为byte,short,需要强转。
什么是拆装箱?装箱就是自动将基本数据类型转换为包装器类型(int–>Integer); 调用方法:Integer的valueof(int)方法
拆箱就是自动将包装器类型转换为基本数据类型(Integer->int)。 调用方法:Integer的intValue方法
在JavaSE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integeri=new Integer(10); 而在从Java SE5开始就提供了自动装箱的特性,如果要生成一个数值为10的Integer对象,只需要这样就可以了: Integeri=10;
因为每个Integer 32bit,在[-128,127]之间创建的Integer对象,它是一个Integer数组,直接返回数组中的Integer Object,所以返回true;但是超过这个区间,就会new出来对象,“=”就会比较地址信息,所以,Integer类型判等的时候,要使用equals.(感恩来源)
那针对浮点型数据运算出现的误差问题,你怎么解决?利用Bigdecimal类进行浮点型数据的运算。
面向对象的特征有哪些方面?抽象,继承,封装,多态性
抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。
继承:继承是从已有类得到继承信息创建新类的过程.提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段。
封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口(普通洗衣机和全自动洗衣机的差别,现在使用的智能手机也是)。
访问修饰符public,private,protected以及不写默认时的区别范围:当前类,同包,子类,其他包 public > protected > default > private(依次从后递减一个) 类的成员不写访问修饰的时候默认为default,默认对于同一个包中的其他类相当于公开,不是同一个包内的其他类相当于私有。 Java中外部类的修饰符只能是public或默认,类的成员包括内部类的修饰符四种都可以。 内外部类是相对而言,java调用内部类的方法(3种)
String是最基本的数据类型吗?不是,JAVA中的基本数据类型只有8个,包括byte,int,char,boolean,short,long,float,double,除了基本类型(primitive type)剩下的都是引用类型,Java5之后引入的枚举类型也算一种特殊的引用类型。
float f=3.4 是否正确?不正确,3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f=(float)3.4;或者写成float f=3.4F;。
short s1=1;s1=s1+1;有错吗?short s1=1;s1+=1呢?shorts1=1;s1=s1+1;由于1是int类型,因此s1+1运算结果也是int型,需要强制转换类型才能赋值给short型。 shorts1=1;s1+=1;可以正确编译,因为s1+=1;相当于s1=(short)(s1+1);其中有隐含的强制类型转换。
重载与重写的区别重载的英文是overload,重写的英文是override。
重写:其实就是重写一遍,根据需要,在子类中重新把父类本身有的方法重写一遍。
方法名、参数列表、返回类型都相同。发生在父子类之间访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常重载
重载Overload是一个类中多态性的一种表现重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。 书例子: equals与==的区别==比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。
比较的是操作符两端的操作数是否是同一个对象。两边的操作数必须是同一类型的(可以是父子类之间)才能编译通过。比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如:int a=10与long b=10L与doublec=10.0都是相同的(为true),因为他们都指向地址为10的堆。equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。
所有比较*是否相等时,都是用equals 并且在对常量相比较时,把常量写在前面,因为使用object的equals object可能为null 则空指针 在阿里的代码规范中只使用equals,阿里插件默认会识别,并可以快速修改,推荐安装阿里插件来排查老代码使用“==",替换成equals ++I与i++的区别i++:先赋值,后计算 ++i:先计算,后赋值
程序的结构有哪些顺序结构,选择结构,循环结构
数组实例化有几种方式?静态实例化:创建数组的时候已经指定数组中的元素 int[]a= new int[]{1,3,3}
动态实例化:实例化数组的时候,只指定了数组程度,数组中所有元素都是数组类型的默认值A
Java中各种数据默认值Byte,shortint,long默认是都是0 Boolean默认值是false char类型的默认值是’\u0000’,表示每个二进制位都为0的Unicode字符。显示为什么与编码有关。 Float与double类型的默认是0.0 对象类型的默认值是null
Java常用包有哪些?Java.lang Java.io Java.sql Java.util Java.awt Java.net Java.math 具体详解
Object类常用方法有哪些?Equals Hashcode toString wait notify clone getClass 具体详解 拓展: ①两个obj,如果equals()相等,hashCode()一定相等 ②两个obj,如果hashCode()相等,equals()不一定相等 原因:散列存在冲突
java中有没有指针?有指针,但是隐藏了,做了封装,开发人员无法直接操作指针,由jvm来操作指针。
java中是值传递还是引用传递?理论上说,java都是引用传递,对于基本数据类型,传递的是值的副本,而不是值本身。 对于对象类型,传递是对象的引用,当在一个方法操作操作参数的时候,其实操作的是引用所指向的对象。
实例化数组后,能不能改变数组长度?不能,实例化之后,大小是固定的。
假设数组内有5个元素,如果对数组进行反序,该如何做?创建新数组,从后向前遍历每个元素,将取出的元素依次放入新数组中。
形参与实参的区别?实参(argument): 全称为”实际参数”是在调用时传递给函数的参数,实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。
形参(parameter):全称为“形式参数“由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参—一对应,并且实参必须要有确定的值。 形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用,实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回 主调函数后则不能再使用该形参变量。 2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。 3.实参和形参在数量上,类型上,顺序上应严格一致,否则会发生“类型不匹配”的错误。 4.函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。 5.当形参和实参不是指针类型时,在该函数运行时,形参和实参是不同的变量,他们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变,而如果函数的参数是指针类型变量,在调用该函数的过程中,传给函数的是实参的地址,在函数体内部使用的也是实参的地址,即使用的就是实参本身。所以在函数体内部可以改变实参的值。
构造方法能不能显式调用?不能,构造方法当成普通方法调用,只有在创建对象的时候它才会被系统调用。
什么是方法重载?方法的重载就是在同一个类中允许同时存在一个以上的同名方法,只要它们的参数个数或者类型不同即可。在这种情况下,该方法就叫被重截了,这个过程称为方法的重载(override)
构造方法能不能重写?能不能重载?可以重载,但不能重写。
内部类与静态内部类的区别?静态内部类相对与外部类是独立存在的,在静态内部类中无法直接访问外部类中变量、方法。如果要访问的话,必须要new一个外部类的对象,使用new出来的对象来访问。但是可以直接访问静态的变量、调用静态的方法;
普通内部类作为外部类一个成员而存在,在普通内部类中可以直接访问外部类属性,调用外部类的方法。
如果外部类要访问内部类的属性或者调用内部类的方法,必须要创建一个内部类的对象,使用该对象访问属性或者调用方法。
如果其他的类要访问普通内部类的属性或者调用普通内部类的方法,必须要在外部类中创建一个普通内部类的对象作为一个属性,外同类可以通过该属性调用普通内部类的方法或者访问普通内部类的属性。
如果其他的类要访问静态内部类的属性或者调用静态内部类的方法,直接创建一个静态内部类对象即可。
static关键字有什么作用?Static可以修饰内部类、方法、变量、代码块 Static修饰的类是静态内部类 Static修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用。在static方法中不能使用this或者super关键字。 Static修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象,静态变量在内存中只有一份拷贝,在VM加载类的时候,只为静态分配一次内存。 static修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次,静态代码块可以有多个,如果有多个,按照先后顺序依次执行。
final在java中的作用,有哪些用法?final也是很多面试喜欢问的地方,可以从下面五点回答: 1.被final修饰的类不可以被继承 2.被final修饰的方法不可以被重写 3.被final修饰的变量不可以被改变如果修饰引用,那么表示引用不可变,引用指向的内容可变 4.被final修饰的方法JVM会尝试将其内联,以提高运行效率 5.被final修饰的常量,在编译阶段会存入常量池中。除此之外,编译器对final域要遵守的两个重排序规则更好 在构造函数内对一个final域的写入与随后把这个被构造对象的引用照值给一个引用变量,这两个操作之间不能重排序 初次读一个包含final域的对象的引用,与随后初次读这个final域.这两个操作之间不能重排序
Java中final、finally、finalize的区别与用法 String,StringBuffer和StringBuilder的区别是什么?String是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个fifinal类型的字符数组,所引用的字符串不能被改变,一经定义,无法再增制改。每次对String的操作都会生成新的String对象 每次+操作:隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法拼接+后面的字符。
StringBuffer与StringBuilder都继承了AbstractStringBuilder类,而AbtractStringBuilder又实现了CharSequence接口,两个类都是用来进行字符串操作的。 在做字符串拼接修改删除替换时,效率比string更高。
StringBuffer是线程安全的,Stringbuilder是非线程安全的,所以Stringbuildert比stringbuffer效率更高,StringBuffer的方法大多都加了synchronized关键字
synchronized是Java中的关键字,是一种同步锁。 String str=“aaa”,与String str=new String(“aaa")一样吗?形象讲解
String类的常用方法有那些?charAt:返回指定素引处的字符 indexOf():返回指定字符的索引 replace():字符串替换 **trim():**去除字符串两端空白 split():分割字符串,返回一个分割后的字符串数组 getBytes():返回字符串的byte类型数组 length():返回字符串长度 toLowerCase():将字符串转成小写字母
toUpperCase():将字符串转成大写字符 substring():截取字符串 format():格式化字符串 equals():字符串比较
Java中的继承是单继承还是多继承Java中既有单继承,又有多继承。对于java类来说只能有一个父类,对于接口来说可以同时继承多个接口。
Super和this表示什么?Super表示当前类的父类对象This表示当前类的对象
普通类与抽象类有什么区别?普通类不能包含抽象方法,抽象类可以包含抽象方法。 抽象类不能直接实例化,普通类可以直接实例化。
什么是接口?为什么需要接口?接口就是某个事物对外提供的一些功能的声明,是一种特殊的java类,接口弥补了java单继承的缺点。
讲一下java中math类有哪些常用方法?Pow():幂运算 Sqrt():平方根 Round():四舍五入 Abs():求绝对值 Random():生成一个0-1的随机数,包括0不包括1