内存类型

java面试题

匿名 (未验证) 提交于 2019-12-02 20:59:24
面向对象的三个特征 封装,继承,多态,这个应该是人人皆知,有时候也会加上抽象。 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。主要有以下优点: 可替换性:多态对已存在代码具有可替换性 可扩充性:增加新的子类不影响已经存在的类结构 接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的。 灵活性 简化性 代码中如何实现多态 实现多态主要有以下三种方式: 3. 同一类中进行方法重载 虚拟机是如何实现多态的 动态绑定技术(dynamic binding),执行期间判断所引用对象的实际类型,根据实际类型调用对应的方法。 接口的意义 接口的意义用三个词就可以概括:规范,扩展,回调。 抽象类的意义 抽象类的意义可以用三句话来概括: 为其他子类提供一个公共的类型 封装子类中重复定义的内容 定义抽象方法,子类虽然有不同的实现,但是定义时一致的 接口和抽象类的区别 比较 抽象类 接口 默认方法 抽象类可以有默认的方法实现 java 8之前,接口中不存在方法的实现. 实现方式 子类使用extends关键字来继承抽象类.如果子类不是抽象类,子类需要提供抽象类中所声明方法的实现. 子类使用implements来实现接口,需要提供接口中所有声明的实现. 构造器 抽象类中可以有构造器, 接口中不能

Java11 新特性

Deadly 提交于 2019-12-02 17:30:24
Java 11新特性的详细解释。JDK 11已经于 2018年9月25日正式发布,那么Java 11主要包含哪些新特性呢? JDK 11是Java SE 11平台版本11的开源参考实现,由JSR 384在Java Community Process中指定。 阿里巴巴是中国唯一的JCP委员会成员公司,参与Java规范制定。 该版本的功能和时间表是通过JEP流程提出和跟踪的,并由JEP 2.0提案进行了修订。 使用JDK Release Process(JEP 3)生成发布。 Java11 主要新特性 详解 1、ZGC:可伸缩低延迟垃圾收集器 ZGC 即 Z Garbage Collector(垃圾收集器或垃圾回收器),这应该是 Java 11 中最为瞩目的特性,没有之一。ZGC 是一个可伸缩的、低延迟的垃圾收集器,主要为了满足如下目标进行设计: GC 停顿时间不超过 10ms 既能处理几百 MB 的小堆,也能处理几个 TB 的大堆 应用吞吐能力不会下降超过 15%(与 G1 回收算法相比) 方便在此基础上引入新的 GC 特性和利用 colord 针以及 Load barriers 优化奠定基础 当前只支持 Linux/x64 位平台 停顿时间在 10ms 以下,10ms 其实是一个很保守的数据,即便是 10ms 这个数据,也是 GC 调优几乎达不到的极值。根据 SPECjbb

java 面试题(转)

孤街浪徒 提交于 2019-12-02 16:16:44
Java 面试随着时间的改变而改变。在过去的日子里,当你知道 String 和 StringBuilder 的区别就能让你直接进入第二轮面试,但是现在问题变得越来越高级,面试官问的问题也更深入。 在我初入职场的时候,类似于 Vector 与 Array 的区别、HashMap 与 Hashtable 的区别是最流行的问题,只需要记住它们,就能在面试中获得更好的机会,但这种情形已经不复存在。如今,你将会被问到许多 Java 程序员 都没有看过的领域,如 NIO,设计模式,成熟的单元测试,或者那些很难掌握的知识,如并发、算法、数据结构及编码。 由于我喜欢研究 面试题 ,因此我已经收集了许多的面试问题,包括许多许多不同的主题。我已经为这众多的问题准备一段时间了,现在我将它们分享给你们。这里面不但包含经典的面试问题,如线程、集合、equals 和 hashcode、socket,而且还包含了 NIO、数组、字符串、Java 8 等主题。 该列表包含了入门级 Java 程序员和多年经验的高级开发者的问题。无论你是 1、2、3、4、5、6、7、8、9 还是 10 年经验的开发者,你都能在其中找到一些有趣的问题。这里包含了一些超级容易回答的问题,同时包含经验丰富的 Java 程序员也会棘手的问题。 当然你们也是非常幸运的,当今有许多好的书来帮助你准备 Java 面试

数据库标准-mysql

北战南征 提交于 2019-12-02 15:31:59
作者: 听风,原文地址: https://www.cnblogs.com/huchong/p/10219318.html 。JavaGuide 已获得作者授权。 数据库命令规范 数据库基本设计规范 1. 所有表必须使用 Innodb 存储引擎 2. 数据库和表的字符集统一使用 UTF8 3. 所有表和字段都需要添加注释 4. 尽量控制单表数据量的大小,建议控制在 500 万以内。 5. 谨慎使用 MySQL 分区表 6.尽量做到冷热数据分离,减小表的宽度 7. 禁止在表中建立预留字段 8. 禁止在数据库中存储图片,文件等大的二进制数据 9. 禁止在线上做数据库压力测试 10. 禁止从开发环境,测试环境直接连接生成环境数据库 数据库字段设计规范 1. 优先选择符合存储需要的最小的数据类型 2. 避免使用 TEXT,BLOB 数据类型,最常见的 TEXT 类型可以存储 64k 的数据 3. 避免使用 ENUM 类型 4. 尽可能把所有列定义为 NOT NULL 5. 使用 TIMESTAMP(4 个字节) 或 DATETIME 类型 (8 个字节) 存储时间 6. 同财务相关的金额类数据必须使用 decimal 类型 索引设计规范 1. 限制每张表上的索引数量,建议单张表索引不超过 5 个 2. 禁止给表中的每一列都建立单独的索引 3. 每个 Innodb 表必须有个主键 4.

JVM内存结构

安稳与你 提交于 2019-12-02 12:33:59
JVM运行时内存区域结构 一、方法区(线程共享) 1. 什么是方法区? 方法区是系统分配的一个内存逻辑区域,用来存储类型信息(类的描述信息)。 2. 方法区的特点 方法区是线程安全的。由于方法区是线程共享的,所以方法区的数据访问必须设计成是线程安全的。例如,如果有多个线程访问方法区的同一个类,而这个类还没有被加载,这时候只能有一个线程去进行类加载,其他的线程必须等待。 方法区的大小不是固定的。JVM可以根据应用需要动态的调整。此外,方法区也不必是连续的。 方法区也可以被垃圾回收,当某个类不再被使用的时候,JVM将卸载这个类,进行垃圾回收。 3. 方法区里面存的是什么? 3.1 类型信息 对每个加载的类型,JVM必须在方法区保存这个类型的: 类型的全限定名 这个类型直接父类的完整有效名(java.lang.Object和Interface除外) 这个类型的修饰符(public,abstract, final的某个子集) 直接超接口的全限定名 类型标志(该类是类类型还是接口类型) 3.2 类型的常量池 存放该类型所用到的常量的有序集合,包括直接常量(如字符串、整数、浮点数的常量)和对其他类型、字段、方法的符号引用。常量池中每一个保存的常量都有一个索引,就像数组中的字段一样。因为常量池中保存中所有类型使用到的类型、字段、方法的字符引用,所以它也是动态连接的主要对象

C#方法的定义、调用与调试

不羁的心 提交于 2019-12-02 10:32:46
本节内容 1.方法的由来; 2.方法的定义与调用; 3.构造器(一种特殊的方法); 4.方法的重载(Override); 5.如何对方法进行debug; 6.方法的调用与栈* *推荐书目:CLR via C#和C# in Depth, 3rd Edition 1.方法的由来 ①方法(method)的前身是C/C++语言的函数(function) 方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数。 可以使用C/C++语言做对比。 *当函数以成员的身份出现时我们就叫它方法(始于C++) ②永远都是类(或结构体)的成员 C#语言中函数不可能独立于类(或结构体之外)。 只有作为类(或结构体)的成员时才被称为方法。 而在C++中是可以的,称为“全局函数”。 ③是类(结构体)最基本的成员之一 最基本的成员只有两个——字段与方法(成员变量与成员方法),本质还是数据+算法 方法表示类(或结构体)“能做什么事情”。 ④为什么需要方法和函数 目的1:隐藏复杂的结构; 目的2:复用(resue,重用); C++中#include #include “Student.h”//如果是标准类库的话用尖括号,如果是自己定义的则用引号。 2.方法的声明与调用 ①声明方法的语法详解 参见C#语言文档(声明/定义不分家); Parameter全称为”formal parameter”; 形式上的参数,简称

C#方法的定义、调用与调试

随声附和 提交于 2019-12-02 10:30:30
本节内容 1. 方法的由来; 2. 方法的定义与调用; 3. 构造器(一种特殊的方法); 4. 方法的重载( Override ); 5. 如何对方法进行 debug ; 6. 方法的调用与栈 * * 推荐书目: CLR via C# 和 C# in Depth, 3rd Edition 1. 方法的由来 ①方法( method )的前身是 C/C++ 语言的函数( function ) 方法是面向对象范畴的概念,在非面向对象语言中仍然称为函数。 可以使用 C/C++ 语言做对比。 * 当函数以成员的身份出现时我们就叫它方法(始于 C++ ) ②永远都是类(或结构体)的成员 C# 语言中函数不可能独立于类(或结构体之外)。 只有作为类(或结构体)的成员时才被称为方法。 而在 C++ 中是可以的,称为“全局函数”。 ③是类(结构体)最基本的成员之一 最基本的成员只有两个 ——字段与方法(成员变量与成员方法),本质还是数据 + 算法 方法表示类(或结构体) “能做什么事情”。 ④为什么需要方法和函数 目的 1 :隐藏复杂的结构; 目的 2 :复用( resue ,重用); C++ 中 #include<iostream> #include "Student.h"// 如果是标准类库的话用尖括号,如果是自己定义的则用引号。 2. 方法的声明与调用 ①声明方法的语法详解 参见 C#

Go语言基础之指针

家住魔仙堡 提交于 2019-12-02 06:51:07
Go语言基础之指针 区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。 要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。 Go语言中的指针 Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝数据。类型指针不能进行偏移和运算。Go语言中的指针操作非常简单,只需要记住两个符号: & (取地址)和 * (根据地址取值)。 指针地址和指针类型 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。Go语言中使用 & 字符放在变量前面对变量进行“取地址”操作。 Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如: *int 、 *int64 、 *string 等。 取变量指针的语法如下: ptr := &v // v的类型为T 其中: v:代表被取地址的变量,类型为 T ptr:用于接收地址的变量,ptr的类型就为 *T ,称做T的指针类型。*代表指针。 举个例子: func main() { a := 10 b := &a fmt.Printf("a:%d ptr:%p\n", a, &a) // a:10 ptr:0xc00001a078 fmt.Printf("b:%p type:

一篇文章详解python的字符编码问题

会有一股神秘感。 提交于 2019-12-02 02:55:30
一篇文章详解python的字符编码问题 一:什么是编码   将明文转换为计算机可以识别的编码文本称为“编码”。反之从计算机可识别的编码文本转回为明文为“解码”。   那么什么是明文呢,首先我们从一段信息说起,消息以人们可以理解,易懂的表示存在,我们把这个表示为明文(plain text)。对于说英文的人,纸张上打印的或者屏幕上显示的英文都算是明文。 二:都有什么编码格式? 1:ASCII(占一个字符,只支持英文)   计算机上的数据都是以二进制的形式存储的,1个字节(8比特)可以表示256种状态,英文只有26个字符,再加上一些特殊的字符,使用128个就够了,计算机就可以使用127个不同字节来表示英文文字,这就是ASCII码 2:GB2312(占两个字符,支持6700+汉字)   计算机进入中国后,无法显示中文,一个字节已经被占满了,我国重新制定了一个编码表,将扩展的第八位对应的拉丁文全部删掉,规定一个小于127的字符与原来的意义相同,当两个大于127的字符连接在一起的时候,就表示一个汉字,前面一个字节为高字节,后面一个字节为低字节,这样就可以表示7000多汉字,这种编码叫做GB2312。GB2312是对ASCII的中文扩展 3:GBK和GB18030(GB2312的升级版,支持21000+汉字)   由于汉字的数量太大,GB2312是不能满足需求

java初中级面试题(最新版)

邮差的信 提交于 2019-12-01 20:25:30
Java基础方面: 概念 1、什么是面向对象? 万物皆对象,把现实中有共同特性行为的对象抽象成类,类是程序中最基本的单位。 2、类和对象 面向对象的思想是如何在java展现的呢? 就是通过类和对象 *类是 一组相关的属性和行为的集合。是一个抽象的概念。 *对象 是该类事物的具体表现形式。具体存在的个体。 类是对象的抽象,对象是类的实例。 *成员变量 事物的属性 *成员方法 事物的行为 3、java是如何实现跨平台的? Java的跨平台是通过Java虚拟机JVM来实现的。不同的平台需要安装不同的虚拟机,java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。 4、JRE,JDK和JVM之间的关系 JDK包含JRE,JRE包含JVM JRE(JavaRuntimeEnvironment,Java运行环境),也就是Java平台。所有的Java 程序都要在JRE下才能运行。普通用户只需要运行已开发好的java程序,安装JRE即可。 JDK(Java Development Kit)是程序开发者用来来编译、调试java程序用的开发工具包。JDK的工具也是Java程序,也需要JRE才能运行。jre是jdk的一部分。为了保持JDK的独立性和完整性