01.介绍一下JAVA,说一下优点、缺点
java是sun公司推出的一种程序设计语言和操作系统。目前有三个版本,JavaSE、JavaEE,JavaME。java的特点就是面向对象编程。对象是对现实世界的抽象成两部分:属性和行为,java中类是封装对象属性和行为的载体。Java面向对象编程有三大特点:封装、继承、多态。封装是指用户对数据的访问只能通过特定的对外提供的接口,最常用的就是gettter()setter();继承是指从已有类派生出新类,新类可以吸收父类的属性和行为,并能扩展新功能;多态是指:不同类的对象对同一消息做出的不同响应,本质是编译时和运行时才能决定对象的行为。【编译时多态:方法重载[静态分派]】【运行时多态:方法重写[动态分派]】
面向对象的目的:提高代码的可复用性、可扩展性、可靠性。
java的优点:java的核心优势就是支持跨平台,一次编译,到处运行。具体实现就是,源代码.java经编译器编译执行后生成字节码.class,然后再由java虚拟机解释执行字节码,生成不同机器可以识别的机器码。由于java虚拟机是跨平台的,所以实现了java代码在不同平台上运行。只要在不同平台上安装对应的虚拟机,因为不同平台的字节码文件是一样的。
简单性、解释性、面向对象、高性能、分布式管理、多线程、健壮性、动态、结构中立、安全性、开源、跨平台。
java的缺点:效率低:不能直接操作内存;运行时多态;垃圾回收机制;解释执行;平台无关副作用,不能直接调用系统API[JNI解决]
逆向编译:
不适合开发桌面应用程序
多线程:为了能够支持多种操作系统的不同线程支持侧率,java只能采取笼统松散的线程规范。
JDK、JRE:使用JDK利用JRE中的类库开发完成的java程序,并由JDK编译后,交给JVM[解释器]解释再给平台运行。
02.学过哪些课程,挑一门介绍
《设计模式》简介
单例模式详解。
03.数据结构:说一下B-树和B+树
04.JAVA中进程和线程介绍一下
进程
05.说说序列化,static变量能否被序列化
实现序列化的两种方法:
(1)实现Serializable接口
如果只实现Serializable接口而没有其他处理,则采用默认的序列化机制。不仅会序列化当前对象本身,还会对该对象引用的其它对象也进行序列化
当某个字段被声明为transient后,默认序列化机制就会忽略该字段。
为什么一个类实现了Serializable接口,它就可以被序列化呢?
使用ObjectOutputStream,如果被写对象的类型是String,或数组,或Enum,或Serializable,那么就可以对该对象进行序列化,否则将抛出NotSerializableException。
自定义序列化:writeObject()方法与readObject()方法
(2)实现Externalizable接口
使用Externalizable进行序列化时,当读取对象时,会调用被序列化类的无参构造器去创建一个新的对象,然后再将被保存对象的字段的值分别填充到新对象中。由于这个原因,实现Externalizable接口的类必须要提供一个无参的构造器,且它的访问权限为public。
(3)readResolve()方法
无论是实现Serializable接口,或是Externalizable接口,当从I/O流中读取对象时,readResolve()方法都会被调用到。实际上就是用readResolve()中返回的对象直接替换在反序列化过程中创建的对象
06.看过哪些课外书,介绍一下
07.看论坛关注哪些板块,介绍一下
新技术:区块链
(1)区块链诞生自中本聪的比特币,把去中心化公开账本称为区块链。
(2)本质是放在非安全环境中的分布式数据库(系统)
一个分布在全球各地、能够协同运转的数据库存储系统,区别于传统数据库运作——读写权限掌握在一个公司或者一个集权手上(中心化的特征),区块链认为,任何有能力架设服务器的人都可以参与其中。来自全球各地的掘金者在当地部署了自己的服务器,并连接到区块链网络中,成为这个分布式数据库存储系统中的一个节点;一旦加入,该节点享有同其他所有节点完全一样的权利与义务(去中心化、分布式的特征)。与此同时,对于在区块链上开展服务的人,可以往这个系统中的任意的节点进行读写操作,最后全世界所有节点会根据某种机制的完成一次又依次的同步,从而实现在区块链网络中所有节点的数据完全一致。
(3)采用密码学的方法保证已有数据不被篡改。
<1>密码学哈希函数
一个函数Y=H(X),有如下性质:1,有X可以很容易算出Y;2,有Y不可能算出X;3,有Y不可能找到另一个X'使得H(X')=Y;3.5,如果X和X'相差很小,H(X)和H(X')则完全不相关。
主要用于验证信息完整性——在一个信息后面放上这个信息的哈希值,这个值很小,例如256bit,而且计算方便。收到信息之后收信人再算一遍哈希值,对比两者就知道这条信息是否被篡改过了。
<2>非对称加密(公钥、私钥)
对称加密就是有个密钥,可以理解成保险箱钥匙,你把消息加密变成密文,没有人能看懂这是啥,然后同一把钥匙解密成原来的消息。
非对称加密就是有两把钥匙,一把叫公钥,一把叫私钥,用其中一把加密的话,只能用另一把解密,反之亦然。另一个重要的性质是,给你密文,明文和其中一把钥匙,你还是解不出来另一把钥匙是啥。原理基本上是基于一些困难数学问题
非对称加密有两个作用:信息加密之外,就是身份验证。
因为通常情况我们假设一对公私钥,公钥是公开的,而私钥只有本人有,于是一个人如果有对应的私钥,我们就可以认定他是本人。其中一个重要的应用就是数字签名——某个消息后面,发信人对这个消息做哈希运算,然后用私钥加密。接着收信人首先对消息进行哈希运算,接着用相应的公钥解密数字签名,再对比两个哈希值,如果相同,就代表这个消息是本人发出的而且没有被篡改过。
(4)采用共识算法来对新增数据达成共识
<1>BFT:恶意节点可以做任何事
<2>比特币共识模型:公认价值
(5)特征:
<1>去中心化
由于使用分布式核算和存储,不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护。
<2>开放性
系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明。
<3>自治性
区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据,使得对“人”的信任改成了对机器的信任,任何人为的干预不起作用。
<4>信息不可篡改
一旦信息经过验证并添加至区块链,就会永久的存储起来,除非能够同时控制住系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高。
<5>匿名性
由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此交易对手无须通过公开身份的方式让对方自己产生信任,对信用的累积非常有帮助。
08.【主要关注技术基础和项目经验】介绍一个项目,遇到了哪些问题,详细说一下,并详细说一下解决方案
java是sun公司推出的一种程序设计语言和操作系统。目前有三个版本,JavaSE、JavaEE,JavaME。java的特点就是面向对象编程。对象是对现实世界的抽象成两部分:属性和行为,java中类是封装对象属性和行为的载体。Java面向对象编程有三大特点:封装、继承、多态。封装是指用户对数据的访问只能通过特定的对外提供的接口,最常用的就是gettter()setter();继承是指从已有类派生出新类,新类可以吸收父类的属性和行为,并能扩展新功能;多态是指:不同类的对象对同一消息做出的不同响应,本质是编译时和运行时才能决定对象的行为。【编译时多态:方法重载[静态分派]】【运行时多态:方法重写[动态分派]】
面向对象的目的:提高代码的可复用性、可扩展性、可靠性。
java的优点:java的核心优势就是支持跨平台,一次编译,到处运行。具体实现就是,源代码.java经编译器编译执行后生成字节码.class,然后再由java虚拟机解释执行字节码,生成不同机器可以识别的机器码。由于java虚拟机是跨平台的,所以实现了java代码在不同平台上运行。只要在不同平台上安装对应的虚拟机,因为不同平台的字节码文件是一样的。
简单性、解释性、面向对象、高性能、分布式管理、多线程、健壮性、动态、结构中立、安全性、开源、跨平台。
java的缺点:效率低:不能直接操作内存;运行时多态;垃圾回收机制;解释执行;平台无关副作用,不能直接调用系统API[JNI解决]
逆向编译:
不适合开发桌面应用程序
多线程:为了能够支持多种操作系统的不同线程支持侧率,java只能采取笼统松散的线程规范。
JDK、JRE:使用JDK利用JRE中的类库开发完成的java程序,并由JDK编译后,交给JVM[解释器]解释再给平台运行。
02.学过哪些课程,挑一门介绍
《设计模式》简介
单例模式详解。
03.数据结构:说一下B-树和B+树
04.JAVA中进程和线程介绍一下
进程
05.说说序列化,static变量能否被序列化
实现序列化的两种方法:
(1)实现Serializable接口
如果只实现Serializable接口而没有其他处理,则采用默认的序列化机制。不仅会序列化当前对象本身,还会对该对象引用的其它对象也进行序列化
当某个字段被声明为transient后,默认序列化机制就会忽略该字段。
为什么一个类实现了Serializable接口,它就可以被序列化呢?
使用ObjectOutputStream,如果被写对象的类型是String,或数组,或Enum,或Serializable,那么就可以对该对象进行序列化,否则将抛出NotSerializableException。
自定义序列化:writeObject()方法与readObject()方法
(2)实现Externalizable接口
使用Externalizable进行序列化时,当读取对象时,会调用被序列化类的无参构造器去创建一个新的对象,然后再将被保存对象的字段的值分别填充到新对象中。由于这个原因,实现Externalizable接口的类必须要提供一个无参的构造器,且它的访问权限为public。
(3)readResolve()方法
无论是实现Serializable接口,或是Externalizable接口,当从I/O流中读取对象时,readResolve()方法都会被调用到。实际上就是用readResolve()中返回的对象直接替换在反序列化过程中创建的对象
06.看过哪些课外书,介绍一下
07.看论坛关注哪些板块,介绍一下
新技术:区块链
(1)区块链诞生自中本聪的比特币,把去中心化公开账本称为区块链。
(2)本质是放在非安全环境中的分布式数据库(系统)
一个分布在全球各地、能够协同运转的数据库存储系统,区别于传统数据库运作——读写权限掌握在一个公司或者一个集权手上(中心化的特征),区块链认为,任何有能力架设服务器的人都可以参与其中。来自全球各地的掘金者在当地部署了自己的服务器,并连接到区块链网络中,成为这个分布式数据库存储系统中的一个节点;一旦加入,该节点享有同其他所有节点完全一样的权利与义务(去中心化、分布式的特征)。与此同时,对于在区块链上开展服务的人,可以往这个系统中的任意的节点进行读写操作,最后全世界所有节点会根据某种机制的完成一次又依次的同步,从而实现在区块链网络中所有节点的数据完全一致。
(3)采用密码学的方法保证已有数据不被篡改。
<1>密码学哈希函数
一个函数Y=H(X),有如下性质:1,有X可以很容易算出Y;2,有Y不可能算出X;3,有Y不可能找到另一个X'使得H(X')=Y;3.5,如果X和X'相差很小,H(X)和H(X')则完全不相关。
主要用于验证信息完整性——在一个信息后面放上这个信息的哈希值,这个值很小,例如256bit,而且计算方便。收到信息之后收信人再算一遍哈希值,对比两者就知道这条信息是否被篡改过了。
<2>非对称加密(公钥、私钥)
对称加密就是有个密钥,可以理解成保险箱钥匙,你把消息加密变成密文,没有人能看懂这是啥,然后同一把钥匙解密成原来的消息。
非对称加密就是有两把钥匙,一把叫公钥,一把叫私钥,用其中一把加密的话,只能用另一把解密,反之亦然。另一个重要的性质是,给你密文,明文和其中一把钥匙,你还是解不出来另一把钥匙是啥。原理基本上是基于一些困难数学问题
非对称加密有两个作用:信息加密之外,就是身份验证。
因为通常情况我们假设一对公私钥,公钥是公开的,而私钥只有本人有,于是一个人如果有对应的私钥,我们就可以认定他是本人。其中一个重要的应用就是数字签名——某个消息后面,发信人对这个消息做哈希运算,然后用私钥加密。接着收信人首先对消息进行哈希运算,接着用相应的公钥解密数字签名,再对比两个哈希值,如果相同,就代表这个消息是本人发出的而且没有被篡改过。
(4)采用共识算法来对新增数据达成共识
<1>BFT:恶意节点可以做任何事
<2>比特币共识模型:公认价值
(5)特征:
<1>去中心化
由于使用分布式核算和存储,不存在中心化的硬件或管理机构,任意节点的权利和义务都是均等的,系统中的数据块由整个系统中具有维护功能的节点来共同维护。
<2>开放性
系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息高度透明。
<3>自治性
区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据,使得对“人”的信任改成了对机器的信任,任何人为的干预不起作用。
<4>信息不可篡改
一旦信息经过验证并添加至区块链,就会永久的存储起来,除非能够同时控制住系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高。
<5>匿名性
由于节点之间的交换遵循固定的算法,其数据交互是无需信任的(区块链中的程序规则会自行判断活动是否有效),因此交易对手无须通过公开身份的方式让对方自己产生信任,对信用的累积非常有帮助。
08.【主要关注技术基础和项目经验】介绍一个项目,遇到了哪些问题,详细说一下,并详细说一下解决方案