做网站运营还是翻译福州做网站设计公司
web/
2025/10/7 0:33:39/
文章来源:
做网站运营还是翻译,福州做网站设计公司,大哥商品做网站的目的,枣庄网站建设多少钱八种基本数据类型以及包装类
八种基本数据类型默认值#xff1f;大小#xff1f;范围区间#xff1f;包装类的缓存区间#xff1f;
序号类型名称默认值大小最小值最大值包装类缓冲区间1booleanfalse1B0(false)1(true)Boolean无2byte(byte)01B-128127Byte-128 ~ 1273char‘…八种基本数据类型以及包装类
八种基本数据类型默认值大小范围区间包装类的缓存区间
序号类型名称默认值大小最小值最大值包装类缓冲区间1booleanfalse1B0(false)1(true)Boolean无2byte(byte)01B-128127Byte-128 ~ 1273char‘\u0000’2B‘\u0000’‘\uFFFF’Character(char)0 ~ (char)1274short(short)02B-2^152^15 - 1Short-128 ~ 1275int04B-2^312^31 - 1Integer-128 ~ 1276long0L8B-2^632^63 - 1Long-128 ~ 1277float0.0f4B1.4e-45 (1.4 * 10^-45)3.4e38 (3.4 * 10^38)Float无8double0.0d8B4.9e-324(4.9 * 10^-324)1.798e308(1.798 * 10^308)Double无
转换关系是什么
从左到右自动转换从右到左需要强制转换 包装类有哪些共性
具有基本数值作为参数的构造函数。例如Integer i new Integer(66);具有字符串作为参数的构造函数。例如Integer i new Integer(-12);如果字符串内容与当前包装类型不匹配会抛出NumberFormatException异常例如Integer i new Integer(-12.5);具有返回对象基本值的typeValue方法例如int num i.intValue();具有将字符串转换为基本值的parseType方法例如int num Integer.parseInt(“56”);所有包装类都覆写了hashCode与equals方法以提供对Map的支持equals方法用于比较同一类型两个对象的值是否相等不要使用具有将值转成字符串的方法toString()方法都支持自动装箱与拆箱大大方便了基本数据类型与它们包装类的使用。
核心类之Object
Object类有哪些核心方法
getClass()、hashcode()、equals()、clone()、toString()、notify()、notifyAll()、wait()、finalize() 等。
equal() 与 的区别
equal被重写前无区别。
clone()如何使用深clone与浅clone的区别
想要实现clone需要实现Cloneable接口并重写Object的clone()方法浅clone对基本数据类型进行值传递对引用数据类型进行引用传递般的拷贝此为浅拷贝深clone对基本数据类型进行值传递对引用数据类型可以通过以下方式实现 如果所有对象都支持clone可以在clone方法内再一次clone引用的对象然后set进去通过字节流反序列化实现通过序列化工具实现如apache.commons.lang3.SerializationUtils或Gson。
finalize()方法什么时候被调用
对象被GC回收前。
String
String的底层数据结构是什么
不可变的字符数组。
String定义为final的原因
作为与基本数据类型有着相同地位的数据结构不可变性是定义常量的基础因此JVM中才可以定义字符串常量池以此来提升使用效率与安全性。
String为什么非常适合作为HashMap的key
String重写了Object类的hashCode()与equals()方法这两个方法都是根据字符串的内容去计算和比较而非内存地址hash值在首次计算后会被缓存性能良好这也是String能广泛使用于Map的key的原因。
集合体系架构图 HashMap
底层数据结构是什么
数组 链表 红黑树
put一个元素的全过程
初始化 - hashCode寻址 - equals比较 - 替换或追加 - 扩容
get一个元素的全过程
hashCode寻址 - equals确认
初始容量是什么什么时候转红黑树什么时候扩容如何扩容
初始容量16链表长度 8且总容量 64 转红黑树扩容因子0.75扩大2倍
为什么每次扩容2倍而不是3倍
容量n为2的指数倍可以保证元素在数组中分布的更均匀n - 1% hashcode 等价于二进制运算 1111 0101
可不可以不扩容会有什么问题
不扩容会导致hash冲突越来越多使用效率逐渐下降。
多线程put时会出现哪些问题
同一个槽下的元素可能被覆盖扩容时原put到旧table的元素会丢失jdk1.7在对链表追加元素时使用头插法扩容后链表元素顺序会发生反转多线程同时触发扩容会导致死链jdk1.8在扩容时将链表的头插法改为尾插法保证链表的顺序不会改变避免了死链发生。
红黑树的特性要求是什么
每个节点要么是红色要么是黑色但根节点永远是黑色的红色节点不能连续也就是说红色节点的子和父都不能是红色的从任一节点到其每个叶子节点的路径都包含相同数量的黑色节点。
ConcurrentHashMap
底层数据结构是什么
数组 链表 红黑树
如果保证线程安全
在put和resize时加乐观锁cas。
高并发下扩容原理是什么
在put过程中如果发现table处于迁移状态当前线程会协助迁移将老数据都迁移到新的table中后再执行put过程。
高并发下size值如何计算
并发量不大的情况下直接通过cas更新baseCount并发量很大的情况下采用分段计算方式把新增加的值落到counterCells[]数组来减少冲突counterCells满了还会扩容最后 size baseCount counterCells。
ArrayList
底层数据结构是什么
初始大小为10的数组。
如果在中间位置add或remove一个元素会发生什么
导致该位置后的元素都需要进行位移从而导致内存拷贝。
什么时候扩容扩容多少
数组满的时候扩容1.5倍。
适合哪种场景使用
数组内存连续查询效率较高O(1)而修改可能会导致元素位移内存copy因此适合查询多修改少特别是在中间位置修改的场景。
LinkedList
底层数据结构是什么
双向链表。
如何add一个元素
先找到要add的位置再将前后节点的引用指向该节点同时更新该节点的前序后续节点的引用。
描述get一个元素的过程
如果知道位置则根据总量判断该节点距离头近还是尾近然后从近的一端去遍历。如果不知道位置则直接去遍历。
适合哪种场景使用
修改只修改引用不涉及内存copy因此代价较低但是查询只能从头或从尾去遍历O(n)适合写多读少的场景。
LinkedHashMap
实现LRU
LinkedHashMap extends HashMap 具有和HashMap一样快的查找速度内部维护一个双向链表用来维护插入顺序或者LRU顺序内部属性accessOrder决定了顺序默认为false,此时维护的是插入顺序 构造函数 LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder)when accessOrder trueget操作会将该节点移到链表尾部保证链表尾部是最近访问的节点链表head节点就是最久未使用的节点put操作会将该节点移到链表尾部保证链表尾部是最近访问的节点链表head节点就是最久未使用的节点put操作后when removeEldestEntry()方法返回为true会移除最晚的节点就是head节点removeEldestEntry()默认为false如果为true必须继承LinkedHashMap重写这个方法实例实现LRU缓存通过移除最近最久未使用的节点。从而保证缓存空间足够。并且缓存的数据都是热点数据。
泛型
泛型的作用和原理是什么
泛型可以消除代码中的强制类型转换同时获得一个附加的类型检查层该检查层可以防止有人将错误类型的键或值保存在集合中。这就是泛型所做的工作。Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数会在编译器在编译的时候去掉。这个过程就称为类型擦除。
使用泛型有什么好处
泛型的好处是在编译的时候检查类型安全并且所有的强制转换都是自动和隐式的提高代码的重用率。 类型安全提高编译器验证的效率消除强制类型转换提高代码可读性简化程序员开发难度提升性能将强制类型转换、安全校验等操作在编译器完成简化了程序执行期的工作。
? extends T与? super T的区别是什么 ? extends T可以赋值给任何T以及T的子类的集合上界为T取出的类型带有泛型限制向上转型为T除了null以外任何元素不得添加进? extends T集合内。 ? super T可以赋值给任何T以及T的父类集合下界为T取出的类型会泛型丢失添加时只能添加T或T的子类。
stream
stream的底层实现是怎样的
Stream 处理数据的过程可以类别成工厂的流水线。数据可以看做流水线上的原料对数据的操作可以看做流水线上的工人对原料的操作Stream 是一个接口最主要的实现是ReferencePipelineReferencePipeline 包含了控制数据流入的 Head 中间操作 StatelessOp、StatefulOp终止操作 TerminalOp Head节点定义了集合流入流水线的规范与方式StatelessOp是无状态操作每个数据的处理是独立的不会影响或依赖之前的数据如filter()、map、flatMap()StatefulOp是有状态操作处理时会记录状态比如处理了几个。后面元素的处理会依赖前面记录的状态或者拿到所有元素才能继续下去如distinct()、sorted()、limit()TerminalOp是终止操作其中又分为短路操作和非短路操作 短路操作拿到符合预期的结果就会停下来不一定会处理完所有数据。如anyMatch()、allMatch()、findFirst()、findAny() 等非短路操作处理完所有数据才能得到结果。如collect()、count()、forEach()、max()、min()、reduce()、toArray()等。
fruitList.stream().filter(a - a.getName().equals(香蕉)).collect(Collectors.toList());并行流是什么
parallelStream
lambda实现List分组、过滤、去重、排序、转Map
https://hujinyang.blog.csdn.net/article/details/96432029
stream().map与stream().flatMap的区别
map处理完数据后返回的是一个与原结构一致的streamflatMap把流中的层级结构扁平化就是将最底层元素抽出来放到一起。
反射
反射的原理是什么
反射通过解析字节码根据动态信息获取类、方法、属性等相关信息的技术。
反射为什么性能差
java反射之所以慢根本原因是JIT即时编译器没法对反射相关的代码做优化JIT是指在程序运行期间把字节码文件编译成机器码的过程由于反射涉及动态解析的类型没有具体的字节码所以无法被JIT优化。
IO流
常见的IO流有哪些
https://hujinyang.blog.csdn.net/article/details/103774297
Java Socket
Socket连接过程是什么
https://hujinyang.blog.csdn.net/article/details/103775022
BIO与NIO
如何理解同步、异步、阻塞、非阻塞
同步强调的是顺序所谓同步调用就是可以确定程序执行的顺序的调用。比如说执行一个调用知道调用返回之前下一行代码不会执行。这种顺序是确定的情况就是同步而异步调用则恰恰相反异步调用不明确执行顺序。比如说一个回调函数不知道何时会回来阻塞和非阻塞是一种读取或者写入操作函数的实现方式阻塞方式下读取或者写入函数将一直等待而非阻塞方式下读取或者写入函数会立即返回一个状态值同步/异步是宏观上进程间通讯通常表现为网络IO的处理上阻塞/非阻塞是微观上进程内数据传输通常表现为对本地IO的处理上阻塞和非阻塞是同步/异步的表现形式。由上描述基本可以总结一句简短的话同步和异步是针对目的和顺序阻塞和非阻塞是针对实现方式。
什么是同步非阻塞
同步主要是针对client端获取结果的过程而言。一个线程从某条通道发送请求读取数据但是它仅能得到目前可用的数据如果目前没有可用数据就什么都不会获取它不会保持线程阻塞可以暂时做其它事情但是仍然需要时不时的去询问看数据有没有就绪虽然不用阻塞但仍然要定时询问而不是等人家送上门。非阻塞是针对server端的处理过程而言。一个线程请求写入一些数据到某条通道但不需要等待它完全写入这个线程同时可以去做别的事情多路复用。 线程通常将非阻塞 IO 的空闲时间用于在其它通道上执行 IO 操作所以一个单独的线程现在可以管理多个输入和输出的通道channel。Java NIO 是一种同步非阻塞模式 IO。
BIO与NIO的区别是什么
https://hujinyang.blog.csdn.net/article/details/103796894
NIO的核心概念有哪些
https://hujinyang.blog.csdn.net/article/details/103789632
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88184.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!