字符串数组与字符串_字符串与字符数组的区别

字符串数组与字符串_字符串与字符数组的区别计算机基础(Java,Python,数据库)高频面试题总结持续更新中… …Java篇1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。JRE:Java Runtime Env

计算机基础(Java,Python,数据库)高频面试题总结   持续更新中… …   Java篇   1. JDK 和 JRE 有什么区别?   JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。   JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。   2. == 和 equals 的区别是什么?   ==:对于基本数据类型,==比较的是值,对于引用数据类型,比较的是引用。   equals:本质上是==,但很多引用类型对这个函数进行了重写,变成了值比较。   3. Java数据类型   基本数据类型:数值型,字符型,布尔型   引用数据类型:类(如String,Date,Integer Long Boolean Byte),接口(如list,map,set),数组
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   4. final 在 java 中有什么作用?   final 修饰的类叫最终类,该类不能被继承。final 修饰的方法不能被重写。final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。   5. java 中操作字符串都有哪些类?它们之间有什么区别?   操作字符串的类有:String、StringBuffer、StringBuilder。   String 和 StringBuffer、StringBuilder 的区别:String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。   StringBuffer 和 StringBuilder 最大的区别在于:StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。   线程安全:String 中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder 是 StringBuilder 与 StringBuffer 的公共父类,定义了一些字符串的基本操作,如 expandCapacity、append、insert、indexOf 等公共方法。StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。   对于三者使用的总结:操作少量的数据: 适用 String单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer   6. 接口和抽象类的区别是什么(常问)?   抽象类:包含抽象方法的类→抽象类(反之不成立,也就是说抽象类不一定包含抽象方法,可以不包含,也可以包含非抽象方法)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。抽象类不能用来创建对象;如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。接口接口中可以含有变量和方法。变量会被隐式地指定为public static final变量(并且只能是public static final变量),而方法会被隐式地指定为public abstract方法且只能是public abstract方法是对行为的抽象两者的区别   语法层面的区别:抽象类可以提供成员方法的实现细节(可以包含非抽象方法),而接口中只能存在public abstract 方法;抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;一个类只能继承一个抽象类,而一个类却可以实现多个接口。   设计层面的区别:抽象类是对一种事物的抽象,即对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。(也就是说,抽象类可以添加新方法,不改变子类,而接口改动,所有实现了这个接口的类都要改动)深入理解Java的接口和抽象类 – Matrix海子 – 博客园   7. 重写和重载区别   先了解下方法签名的定义,方法签名指的是方法名+参数列表   重载要求方法签名必须不同。重写则要求方法签名必须相同。   重载:发生在同一个类中方法名必须相同,参数类型不同、个数不同、顺序不同方法返回值和访问修饰符可以不同   重写:发生在父类和子类的继承关系中方法名、参数列表必须相同返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类父类方法访问修饰符为 private 则子类就不能重写该方法   8. Java面向对象三大特性   封装:对象属性私有化,同时提供一些方法,可以被外界用来访问内部属性。隐藏实现细节,代码模块化。   继承:使用已存在的类的定义作为基础建立新类,可以添加属性和方法。代码重用,节省开发时间。   多态:Java中有两种形式可以实现多态,继承(多个子类重写父类方法)和接口(实现接口,覆盖方法)接口重用。   9. 线程和进程   进程是操作系统分配资源的最小单位,线程是程序执行(CPU调度)最小单位   一个进程可以包含多个线程,这些线程共享进程的资源。   10. Java集合概览   https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/collection/images/Java-Collections.jpeg
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别为什么这么糊。。。
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   11. 说说 List,Set,Map 三者的区别?   list(对付顺序的好帮手):存储的素有序,可重复   set(注重独一无二):存储的素无序,不可重复   map(用key来搜索的专家):使用键值对(key-value)存储,key是无序,不可重复的,value是无序可重复的。每个键最多映射到一个值。   12. Array和ArrayList区别   Array:容量固定但高效。   ArrayList:容量可动态变化,但效率低。   13. HashMap 和 HashSet 区别   
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   14. HashMap 和 HashTable 的区别   线程安全:HashMap是非synchronized,而Hashtable是synchronized,HashMap 是非线程安全的,HashTable 是线程安全的。   效率:HashMap效率更高   对null key和null value的支持:HashMap可以存储null的key和值,HashTable 不允许有 null 键和 null 值。   初始容量大小和每次扩充容量大小的不同 : ① 创建时如果不指定容量初始值,Hashtable 默认的初始大小为 11,之后每次扩充,容量变为原来的 2n+1。HashMap 默认的初始化大小为 16。之后每次扩充,容量变为原来的 2 倍。② 创建时如果给定了容量初始值,那么 Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为 2 的幂次方大小(HashMap 中的方法保证,下面给出了源代码)。也就是说 HashMap 总是使用 2 的幂作为哈希表的大小,后面会介绍到为什么是 2 的幂次方。   底层数据结构: JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。   15. 解决Hash冲突的方法   开放定址法(再散列法):对冲突的key值再次hash。再哈希法:同时构建多个哈希函数,冲突的key使用其他函数拉链法(HashMap的冲突处理方式):将所有哈希值冲突的素构成一个单链表(同义词链)建立公共溢出区:将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的素,一律填入溢出表。   16. 什么是死锁   两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,这些永远在互相等待的进程称为死锁进程。   Python篇   1. Python的垃圾回收机制(garbage collection)   引用计数/标记-清除/分代回收   引用计数:在Python中每一个对象的核心就是一个结构体PyObject,它的内部有一个引用计数器(ob_refcnt)。引用计数为0时就会被删除。   标记-清除:为了解决循环引用的问题。   分代回收:基于一个简单的思想(存在越久的对象越不可能是垃圾)。这样在执行标记-清除算法时可以有效减小遍历的对象数,从而提高垃圾回收的速度。   2. Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)(常问)   赋值:复制引用,没有开辟新的内存空间浅拷贝:   形式:切片操作,工厂函数,copy模块中的copy函数。   如: lst = [1,2,3,[4,5]]   切片操作:lst1 = lst[:] 或者 lst1 = [each for each in lst]   工厂函数:lst1 = list(lst)   copy函数:lst1 = copy.copy(lst)   分为两种情况:(可以理解为只拷贝了嵌套结构中的一层)   不可变对象的浅拷贝:等同于赋值   可变对象的浅拷贝包含复杂子对象:改变复杂子对象的值会影响复制后的值不包含复杂子对象:改变原始值对复制后的值无影响深拷贝:   形式:copy模块中的deepcopy函数   划分一块新的内存空间。拷贝了对象的所有素,包括多层嵌套的素。深拷贝出来的对象是一个全新的对象,不再与原来的对象有任何关联。   3. *args 和 kwargs的用法   定义函数:   可变位置参数(非键值对,可变数量参数)。   多个关键词参数(键值对,可变数量参数)。   如果你想在函数里同时使用所有这三种参数, 顺序是这样的:   some_func(fargs, *args, kwargs)   小结:   一个星(*):表示接收的参数作为组来处理   两个星():表示接收的参数作为字典来处理   *args表示任何多个无名参数,它是一个tuple;kwargs表示关键字参数,它是一个dict。并且同时使用*args和kwargs时,必须*args参数列要在kwargs前,像foo(a=1, b=’2′, c=3, a’, 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”   4. Python数据类型   
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   MySQL篇   1. MySQL的体系结构图   Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   2. 深入了解MySQL索引   对索引的理解   索引是一个排序的列表,列表中存储着索引的值,和包含了这个值的记录所在的物理地址。   索引优缺点优点:提高查找效率,加快分组和排序缺点:索引本身也是表,会占用空间;索引的创建和维护需要时间成本;构建索引会降低数据库修改的效率,因为在修改数据库时也要修改索引表   索引分类   1)从存储结构上来分(常问)Btree索引(B+tree,B-tree)哈希索引full-index 全文索引RTree   2)从应用层次上来分普通索引:一个索引只包含单个列,一张表可以有多个单列索引唯一索引:索引列的值必须唯一,允许有空值复合索引:一个索引包含多个列   3)从表记录的排列顺序和索引的排列顺序是否一致来分(常问)聚集索引:索引和数据一起存放非聚集索引:索引和数据分开存放使用非聚集索引时需要拿到叶子节点上的主键,再去表中查找想要的数据(回表)   数据库的存储引擎   存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。   MySQL提供了多种存储引擎。   常用的有:MyISAM存储引擎(无法处理事务)InnoDB是一个健壮的事务型存储引擎Memory
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   索引实现原理   1)哈希索引   只有memory(内存)存储引擎支持哈希索引。哈希索引计算索引列的hashCode,在hashCode对应的位置存记录的物理地址。   因为使用散列算法,所以访问速度快   因为一个值只能对应一个hashCode,且是散列的分布形式,因此哈希索引不支持范围查找和排序。   2)全文索引   仅可用于MyISAM和InnoDB。在生成FULLTEXT索引时,会为文本生成一份单词的清单,在索引时及根据这个单词的清单来索引。   3)BTree索引和B+Tree索引(重点)   BTree是平衡搜索多叉树,下图是一个三阶的B-Tree
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   B+Tree索引:是B-Tree的变种B+Tree中的非叶子结点不存储数据,只存储键值;B+Tree的叶子结点没有指针,所有键值都会出现在叶子结点上,且key存储的键值对应data数据的物理地址;B+Tree的每个非叶子节点由n个键值key和n个指针point组成;
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   B+Tree对比B-Tree的优点:   1、磁盘读写代价更低   2、查询速度更稳定   带顺序索引的B+TREE   添加了指向相邻叶节点的指针,形成了带有顺序访问指针的B+Tree。提高区间查找的效率。
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   索引类型梳理(重点)   (1)主键索引和二级索引   主键索引:数据表的主键列使用的就是主键索引。   二级索引(辅助索引):二级索引的叶子节点存储的数据是主键。也就是说,通过二级索引,可以定位主键的位置。唯一索引,普通索引,前缀索引,全文索引等索引属于二级索引。
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   (2)聚集索引和非聚集索引   MySQL中最常见的两种存储引擎分别是MyISAM(非聚集)和InnoDB(聚集),分别实现了非聚集索引和聚集索引。   聚集索引即索引结构和数据一起存放的索引。主键索引属于聚集索引。对于 InnoDB 引擎表来说,该表的索引(B+树)的每个非叶子节点存储索引,叶子节点存储索引和索引对应的数据。   优缺点:优点(查询速度快),缺点(依赖于有序数据,更新代价大)   非聚集索引即索引结构和数据分开存放的索引。二级索引属于非聚集索引。MYISAM引擎, 该表的索引(B+树)的每个叶子非叶子节点存储索引, 叶子节点存储索引和索引对应数据的指针。   非聚集索引的叶子节点并不一定存放数据的指针, 因为二级索引的叶子节点就存放的是主键,根据主键再回表查数据。   优缺点:优点(更新代价小),缺点(依赖于有序数据,可能需要二次查询,即回表)
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别   3. 数据库事务的四大特性:ACID   (1)原子性(Atomicity)事务包含的所有操作要么全部成功,要么全部失败回滚。   (2)一致性(Consistency)事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。   (3)隔离性(Isolation)多个并发事务之间要相互隔离。   (4)持久性(Durability)一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。   4. 数据库隔离级别   并行事务的四大问题:   (1)更新丢失:和别的事务读到相同的东西,各自写,自己的写被覆盖了。(谁写的快谁的更新就丢失了)   (2)脏读:读到别的事务未提交的数据。(万一回滚,数据就是脏的无效的了)   (3)不可重复读:两次读之间有别的事务修改。# 不可重复读针对单行,更新操作   (4)幻读:两次读之间有别的事务增删。# 可重复读针对多行,删减操作 对应隔离级别   (1)READ UNCOMMITTED:读未提交,不处理。   (2)READ COMMITTED:读已提交,只读提交的数据,无脏读;   (3)REPEATABLE READ:可重复读,加行锁,两次读之间不会有修改,无脏读无重复读;(MySQL默认隔离级别)   (4)SERIALIZABLE: 串行化,加表锁,全部串行,无所有问题。
字符串数组与字符串_字符串与字符数组的区别
字符串数组与字符串_字符串与字符数组的区别

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/36581.html

(0)
上一篇 2024年 9月 9日
下一篇 2024年 9月 9日

相关推荐

关注微信