随着编程经验的积累,我对编程的理解也不断的发生变化。最开始学的是算法,然后是数据结构,现在开始学习编程思想,这是一个不断进步的过程。编程思想可能是最基础但却是最重要的,以前对这些概念只是照本宣科,并不理解,现在开始重新关注编程思想,有了更多的理解。在这里对个人理解做个总结和记录。
1.所有类的基类是?
对象(Object)。
2.什么是对象?
对象是对客观事物的抽象。对象是类的实例。
3.什么是类?
类是对对象的抽象。类是对象的模板。类是属性和方法的封装体。
4.对象和类的联系?
类是对象的模版,对象是类的实例。
5.对象和类的区别?
类是对象的模板,对象是类的实例,两者之间的区别像模具与成品之间的区别。
6.什么是面向对象?
面向对象(Object Oriented)是一种软件开发方法,是一种对现实世界理解和抽象的方法。
7.什么是属性和方法?
属性是用来描述对象特性的数据,方法是数据的变化过程,是可重用的代码段。
8.面向对象的三大基本特性?
(1)封装:把客观事物封装成抽象的类。尽量隐藏内部的实现细节,仅对可信任的外部提供调用接口。
(2)继承:子类可以具有父类的属性和方法,提高了代码的重用性和可扩展性。
(3)多态:一个接口可以有多种不同的实现方式。
实现多态的方法为重写(override)和重载(overload 有些语言不支持重载)。
9.什么是重写和重载?
(1)重写(override):子类可以重写父类非私有的方法。
(2)重载(overload):一个类中可以有多个同名函数,这些函数的参数不能相同。
10.什么是值类型和引用类型?
(1)值类型:传值(值拷贝)。
(2)引用类型:传址(地址拷贝)。
11.值类型和引用类型的区别?
(1)值类型:存放的是实际数据。(存在栈上,速度快)。
(2)引用类型:存放的是对象的引用。(存在堆上,内存小)。
值类型一人一份内存,引用类型共用一份内存。
打个比方:值类型是私家车,一人一辆,你车坏了你迟到,不影响别人。引用类型是公交车,大家公用一辆,车一坏一车人全迟到。
12.Java中String是值类型还是引用类型?
引用类型。
Java中判断两个字符串相等应该用str1.equals(str2),用==不准确。
public static void main(String[] args) {
String str1 = "string";
String str2 = "string";
String str3 = new String("string");
System.out.println(str1 == str2); //true
System.out.println(str1 == str3); //false
System.out.println(str1.equals(str2)); //true
System.out.println(str1.equals(str3)); //true
}
13.什么是访问修饰符?Java中的访问修饰符都有哪些?
访问修饰符就是控制类、属性和方法访问权限的符号。
Java中的访问修饰符有四种:private、default(默认的)、protected、public。
作用域 | 当前类 | 同包 | 子类 | 其他 |
---|---|---|---|---|
private | √ | × | × | × |
default(不写) | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
访问修饰符的权限越向下越高,尽量用private,权限不够再依次提升权限。(多用private少用public)
14.什么是计算机程序?
计算机程序是可以完成某些功能的计算机指令集。
计算机程序由数据结构和算法构成。
15.什么是数据结构?什么是算法?
数据结构是计算机存储、组织数据的方式。
算法是计算机执行计算过程的具体描述。
好的数据结构和算法会带来更高的运行、存储效率。数据结构往往和高效的检索算法和索引技术有关
通常,计算机程序需要经过编译和链接成为人们难以理解但是计算机理解的格式,然后执行。不需要编译就可以运行的程序称之为脚本程序。
16.什么是装箱?什么是拆箱?
装箱是把值类型转换为引用类型。拆箱是把引用类型转换为值类型。
17.什么是标识符?
标识符是用来给包、类、变量、方法、接口命名的符号。
18.标识符的命名规范有哪些?
(1)标识符由字母、数字、下划线_或美元符号$组成。
(2)首字符不能为数字
(3)不能使用关键字
(4)区分大小写
其实Java中可用的标识符很多,Unicode字符集中的很多字符都可以当作标识符使用,比如¥、中文、日文、希腊字母、罗马数字等等都可以,不过不常用,有兴趣的可以自己试一下。
19.标识符有哪些约定俗成的命名规范?
包:用小写的倒置域名来命名。格式: 前缀+ 项目名+ 模块名+ 层 如:com.it.mode.user
类、接口:首字母大写。如Object、Exception
变量、方法:小写字母开头。多个单词组成时遵循驼峰命名法。第二个单词开始所有单词首字母大写。如:userName、toString();
常量:全部大写,多个单词之间用下划线_连接。如:MAX_VALUE、MIN_VALUE
20.面向对象设计的六大原则是什么?简述这些原则。
(1)单一职责
一个类只专注于做一件事。(一个类或者模块应该有且只有一个改变的原因)
(2)开闭原则
对扩展开放,对修改关闭。
(3)里氏代换原则
父类能出现的地方,子类一定能出现。(子类能替代掉父类,软件的功能不受影响)
(4)接口隔离原则
一个类对另一个类的依赖应该建立在最小接口上。
(5)依赖倒置原则
高层次的模块不应该依赖于底层次的模块,他们都应该依赖于抽象。抽象不依赖于具体实现,具体实现应该依赖于抽象。
(6)迪米特法则
又叫最少知识原则,一个对象应该对其他对象有尽量少的了解,不和陌生人说话。
21.请列举一些你知道的在编程中有用的原理、法则或定律并做简单解释。
1.墨菲定律:事情往往会朝着最坏的方向发展。要做好最坏的打算。
2.奥卡姆剃刀原理:若无必要,勿增实体。即:简单即有效。
22.什么是序列化?什么是反序列化?序列化的目的是什么?
序列化(Serialization)是把对象转换为字节序列的过程
反序列化(Deserialization)是把字节序列转换为对象的过程
序列化用于存储或传输对象
23.请列举一些你知道的数据格式并做简单介绍。
XML:可扩展标记语言。一种文本数据格式,面向对象,易读写。
JSON:JS对象序列。一种文本数据格式,面向对象,简洁易懂,轻量级。
BSON:Binary JSON的缩写,一种二进制的数据格式。主要用于MongoDB中,遍历速度快,数据量可能比JSON更大。
Struct:C系语言支持的一种结构体,结构体数据在内存中是连续的,应用合适的对齐方式后数据会很紧凑,数据量小,因此把结构体中的数据拿出来可以做为一种二进制数据格式。
Protobuf:Google开源的一种二进制数据格式。支持变长整数,数据量小。
Flatbuf:Google开源的一种二进制数据格式,转换速度极快,基于struct结构体做内存拷贝和还原,所以效率极高。
Fast协议:金融界使用的一种二进制数据格式。支持3字节浮点数,数据量小。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。