数据类型分为基本数据类型和引用数据类型
字符串(String)| 基本类型 | 大小 | 取值范围 | 默认值 |
|---|---|---|---|
| boolean | 1字节8位 | true/false | false |
| byte | 1字节8位有符号整数 | -128~127 | (byte)0 |
| short | 2字节16位有符号整数 | -2^15 ~ 2^15-1 | (short)0 |
| int | 4字节32有符号整数 | -2^31 ~ 2^31-1 | 0 |
| long | 8字节64位有符号整数 | -2^63 ~ 2^63-1 | 0L |
| char | 2字节16位Unicode字符 | 0-65535(2^16-1) | \u0000(空,‘’) |
| float | 4字节32位浮点数 | 1.4E-45 ~ 3.4E+38,-1.4E-45 ~ -3.4E+38 | 0.0f |
| double | 8字节64位浮点数 | 4.9E-324 ~ 1.7E+308,-4.9E-324 ~ -1.7E+308 | 0.0d |
不可以,因为String类有final修饰符,而final修饰的类是不能被继承的,实现细节不允许改变。
String str=“abc”和String str=new String(“abc”); 产生几个对象?
1. 前者1或0,后者2或1,先看字符串常量池,如果字符串常量池中没有,都在常量池中创建一个,如果有,前者直接引用,后者在堆内存中还需创建一个“abc”实例对象。
2. 对于基础类型的变量和常量:变量和引用存储在栈中,常量存储在常量池中。
3. 为了提升jvm(JAVA虚拟机)性能和减少内存开销,避免字符的重复创建 项目中还是不要使用new String去创建字符串,最好使用String直接赋值。
String 字符串常量(final修饰,不可被继承),String是常量,当创建之后即不能更改。(可以通过StringBuffer和StringBuilder创建String对象)
ArrayList和LinkedList都实现了List接口,有以下的不同点:
1、ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1) 时间复杂度对元素进行随机范文。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起
,在这种情况下, 查找某个元素的时间复杂度是O(n)。
2、相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者更新索引。
3、LinkedList比ArrayList更占内存,因为LinkedList为每一个节点存储了两个引用,一个指向前一个元素,一个 指向下一个元素。
此题考查的是类加载器实例化时进行的操作步骤(加载->连接->初始化)
父类静态变量、
父类静态代码块、
子类静态变量、
子类静态代码块、
父类非静态变量(父类实例成员变量)、
父类构造方法、
子类非静态变量(子类实例成员变量)、
子类构造方法。
都数据Map接口的类,实现了将唯一键映射到特定的值上。都是双列集合,底层都是哈希算法
HashMap线程不安全,HashMap是数组+链表+红黑树(jdk1.8增加了红黑树部分)实现的,采用哈希表来存储的,HashMap允许键和值为null,效率高。
HashTable线程安全,但是不允许key和value为null,它比HashMap慢,因为它是同步的。
1、抽象类和接口都不能直接实例化,如果实例化,抽象类变量必须指向实现所有抽象方法的子类对象,接口变量必须指向实现所有接口方法的类对象。
2、抽象类要被子类继承,接口要被类实现
3、接口只能做方法申明,抽象类中可以做方法申明,也可以做方法实现。但是jdk1.8之后接口可以通过default关键字做方法实现。
4、接口里定义的变量只能是公共的静态的常量,抽象类中的变量就是普通变量
5、抽象类里的抽象方法必须全部被子类实现,如果子类不能全部实现父类抽象方法,那么该子类只能是抽象类。同样,一个实现接口的时候,如果不能全部实现接口的方法,那么该类也只能为抽象类。
6、抽象方法只能申明,不能实现。abstract void abc();不能写成abstract void abs(){};
7、抽象类里面可以没有抽象方法
8、如果一个类里有抽象方法,那么这个类只能是抽象类
9、抽象方法要被实现、所以不能是静态的,也不能是私有的
10、接口可继承接口,并可多继承接口,但类只能单继承
Spring是一个轻量级的 IOC 和 AOP 的容器框架,Spring框架为开发Java应用程序提供了全面的基础架构支持。它包含了一些很好的功能,如依赖注入和开箱即用的模块,如:Spring JDBC、Spring MVC、Spring Security、Spring AOP、Spring ORM、Spring Test,这些模块缩短应用程序开发时间,提高了应用开发的效率,例如:在Java Web开发的早期阶段,我们需要编写大量的代码来将记录插入到数据库中。但是通过使用Spring JDBC模块的JDBC Template,我们可以将操作简化为几行代码。
Spring Boot 基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的XML配置,为更快,更高效的开发生态系统铺平了道路。
SpringBoot框架中还有两个重要的策略:开箱即用和约定优于配置
SpringBoot中,约定大于配置可以从以下两个方面来理解:
1、 开发人员仅需规定应用中不符合约定的部分
2、在没有规定配置的地方,采用默认配置,以力求最简配置为核心思想
总的来说,上面两条都遵循了推荐默认配置的思想。当存在特殊需求的时候,自定配置即可。这样可以大大的减少配置工作,这就是所谓的“约定”。
SpringBoot 中的一些特征:
1、创建独立的Spring应用
2、嵌入式Tomcat、Jetty、Undertow容器(无需部署war文件)
3、提供的starters 简化构建配置
4、尽可能自动配置spring应用
5、提供生产指标,例如指标、健壮检查和外部化配置
6、完全没有代码生成和XML配置要求
遍历法,第一次遍历确定链表总长度,第二次遍历找到倒数第N个元素。需要遍历两次
N长度队列,遍历链表每个元素入队,队列满时出队,当链表遍历完毕时,队列中队首元素为倒数第N个元素。需要借助额外队列
两个距离N个元素的指针。遍历一次,空间复杂度为O(1)