我吾等年纪轻轻,一遇挫折,便松懈怠慢,日后怎成大器
成大事者不谋于众,谋于众者必流于庸俗
故天将降大任于是人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,曾益其所不能
java基础
面向对象编程有什么特点
答:面向对象的特征主要有以下几个方面:
- 抽象
- 继承
- 封装
- 多态性
Object 中常用的方法
-
1.toString () 方法
-
2.equals 方法
-
3. finalize () 方法
-
[4.hashCode ()方法]
java有几种基本数据类型
8 种
1、整型:byte、short、int、long
2、字符型:char
3、浮点型:float、double
4、布尔型:boolean
HashTable怎么底层是怎么实现线程安全的 ConcurrentHashMap
那么,让我们来看看ConcurrentHashMap是如何实现线程安全的,它能实现高效率的线程安全吗/strong>
? 这里我们就不看ConcurrentHashMap的源码了,简单说说线程安全的原理,其实ConcurrentHashMap实现线程安全也是通过synchronized关键字来控制代码同步来实现的,不同于HashTable的是ConcurrentHashMap在线程同步上更加细分化,它不会像HashTable那样一把包揽的将所有数据都锁住。
? 采用分段锁思路
? 我们都知道ConcurrentHashMap的底层数据结构实现原理其实和HashMap没什么两样,都是数组+链表+红黑树。那么我们就从HashMap入手,来理解。
? 具体HashMap的实现原理剖析请看个人博客:https://blog.csdn.net/zhanglei082319/article/details/87872156
? 怎么将HashMap数据结构使用分段锁的思想进行细分化。在jdk1.7及以前,是这样实现的:
? 比如容器HashMap中存在1000个元素,各个元素都放置到HashMap数组的链表或者红黑数中,最后得到的数组大小可能只有128,ConcurrentHashMap会根据这128个数组,对其分段,比如以16个数组为一段,可以分为8段。在实际获取元素,添加元素时,会根据元素的索引(如何获取元素在HashMap数组中的索引请看https://blog.csdn.net/zhanglei082319/article/details/87872156)找到该元素所处的段位,然后只将该段位锁住,并不影响其他段位的数据操作。这样如果按照HashTable的效率为基本单位来计算,ConcurrentHashMap在jdk1.7及以前的效率会提高8倍,当然数据量越大,提高的效率将越多。
巴克特show 趴cti 英特no
java 中的io流分为几种
流向分,可以分为输入流和输出流;
单元划分,可以划分为字节流和字符流;
角色划分为节点流和处理流。
Files的常用方法都有哪些/h3>
-
Files.exists():检测文件路径是否存在。
-
Files.createFile():创建文件。
-
Files.createDirectory():创建文件夹。
-
Files.delete():删除一个文件或目录。
-
Files.copy():复制文件。
-
Files.move():移动文件。
-
Files.size():查看文件个数。
-
Files.read():读取文件。
-
Files.write():写入文件。
String与StringBuffer的区别
- 变量和常量StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。
- StringBuffer类中的方法要偏重于对字符串的变化例如追加、插入和删除等
- StringBuffer是线程安全的,在多线程程序中也可以很方便的进行使用,但是程序的执行效率相对来说就要稍微慢一些。
stringbuffer 和 Stringbuilder 的区别是什么/h3>
Files.exists():检测文件路径是否存在。
Files.createFile():创建文件。
Files.createDirectory():创建文件夹。
Files.delete():删除一个文件或目录。
Files.copy():复制文件。
Files.move():移动文件。
Files.size():查看文件个数。
Files.read():读取文件。
Files.write():写入文件。
1.Stringbuilder线程不安全,Stringbuffer线程安全
2.Stringbuilder效率更快,因为它不需要加锁,不具备多线程安全,相对来说Stringbuffer就效率慢一些
String s = “a”+ new String (“b”); 请问该字符串创建了几个对象 其中 创建了几个字符串
5 个 ; 两个字符串常量 两个堆对象 一个stringbuilder
java是从c++语言重新设计
java 中一个类可以继承多个类吗
不可以 可以被多个类继承
Java什么情况下可以多继承
1.内部类
2.接口
3.多层继承
什么是java反射
在编译时不知道加载的是哪一个类,在运行时可以动态获取类的属性调用对象的方法的机制就叫做反射。
什么是java死锁
就是为了保证资源安全,确保一次仅有一个线程对共享资源进行修改。
java 容器都有哪些/h3>
Collection 和 Map 两大类 又有很多子类继承
? Collection
-
List
- ArrayList
- LinkedList
- Vector
- Stack
map
-
Set
- HashSet
- LinkedHashSet
- TreeSet
hash 冲突怎么解决
Java里 Java hashmap采用的是链表,每个节点都是单向链表,有冲突就往链表尾部放
HashMap的工作原理
1.在JDK1.7及之前,是用数组加链表的方式存储的。
2.JDK1.8 把它设计为达到一个特定的阈值之后,就将链表转化为红黑树。
HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象。当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到bucket位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。
当两个不同的键对象的hashcode相同时会发生什么它们会储存在同一个bucket位置的链表中。键对象的equals()方法用来找到键值对。
HashMap
key,value 形式存储
实际上的数组+链表+红黑树
put : 比如说数组长度16 存储数据 张三 内部调用键对象中的hashcode()方法 (将张三做一个hash)
然后根据16取模 返回一个下标 根据这个下标找到bucket位置存储对象
get : 根据equals()方法去找到正确的键值对,返回键值对对象
HashMap如何保证数据唯一性
- hashmap 进行存储数据的时候 会计算hash值
- 根据hash值去判断是否有相同的元素 没有 成功赋值 有 存储失败 照成hash冲突
- hash冲突 根据元素的equals()方法与该哈希值的元素比较,如果没有相同的元素,就存储。
Hashmap 和 HashTable 可以为空吗
HashMap对象的key、value值均可为null。
HahTable对象的key、value值均不可为null。
hasmap 和hastable 的区别
1.hasmap 是线程不安全
2.hastable 是线程安全
HashMap常用方法
**1、put(K key,V value) **赋值
**2、get(Object key) **取值
**3、size() **返回HashMap集合中的元素数量
**4、clear() **清空HashMap集合
5、isEmpty () 判空
6、remove(Object key) 根据key删除数据
**7、values() ** 返回HashMap集合中所有value组成的以Collection数据类型格式数据
抽象类必须要有抽象方法吗/h3>
不是必须的
请说明Collection 和 Collections的区别
1.Collection:
是集合类的上层接口。本身是一个Interface,里面包含了一些集合的基本操作。
Collection接口是Set接口和List接口的父接口
2.Collections
Collections是一个集合框架的帮助类,里面包含一些对集合的排序,搜索以及序列化的操作
线程的 run()和 start()有什么区别/h3>
1.调用 start() 方法是用来启动线程的,轮到该线程执行时,会自动调用 run();直接调用 run() 方法,无法达到启动多线程的目的,相当于主线程线性执行 Thread 对象的 run() 方法。
2.一个线程对线的 start() 方法只能调用一次,多次调用会抛出 java.lang.IllegalThreadStateException 异常;run() 方法没有限制
线程和进程的区别
进程:是指一个内存中运行的应用程序(已经在内存中运行的程序). 一个进程都有一个独立的内存空间,一个电脑(手机)可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位;
线程:是进程中的一个执行单元(线程是依赖于进程的),负责当前进程中程序的执行,一个进程中至少有一个线程(单线程程序)。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
线程创建的方式
第一种: 通过继承Thread类创建线程 重写run()
第二种: 通过实现Runnable接口创建线程 重写run()
第三种: 实现Callable接口 重写 call( )
sleep和wait的区别是面试中一个非常常见的问题
1、sleep是线程中的方法,但是wait是Object中的方法。
2、sleep方法不会释放lock,但是wait会释放,而且会加入到等待队列中。
3、sleep方法不依赖于同步器synchronized,但是wait需要依赖synchronized关键字。
4、sleep不需要被唤醒(休眠之后推出阻塞),但是wait需要(不指定时间需要被别人中断)。
JVM基础面试题
jvm是什么/h3>
JVM就是java虚拟机,它是一个虚构出来的计算机,可在实际的计算机上模拟各种计算机的功能。JVM有自己完善的硬件结构,例如处理器、堆栈和寄存器等,还具有相应的指令系统
Spring 基础面试题
spring 框架是什么
Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求
spring 框架使用了哪些设计模式
1.单例设计模式 spring bean 默认都是单例
2.代理设计模式 spring aop 的实现
3.工厂设计模式 spring 使用工厂设计模式创建bean对象
4.模板方法模式 spring 中 jdbcTemplate redisTemplate 等以Template结尾的对数据库操作的类 采用模板设计模式
spring 有什么有优点
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!