万达信息一面

目录

软件工程学过吧,讲一下软件的生命周期?

Java的三大特性分别说一下?

重写和重载的区别?

String类的方法可以重写吗?

方法不能被重写的三种情况:

final的作用:

HashMap和HashTable有什么区别?

session和cookie有什么区别?使用场景分别是什么?

讲讲你对Spring的理解?

索引的作用是什么?

每个字段都加索引可不可以?

索引失效的场景?

事务的四个特性?并讲讲他们是什么意思?


第二次面试,效果比第一次好很多

软件工程学过吧,讲一下软件的生命周期?

“软件工程是大一还是大二学的,现在记不太清”

正确答案:

生命周期包括:问题的定义及规划开发方与需求方讨论、需求分析、软件设计、软件编码、软件测试(单元测试、集成测试、系统测试、验收测试)、运营维护阶段。

Java的三大特性分别说一下?

我:“多态,面向对象,封装和继承,面向对象是思考的方式是任务的完成需要哪些对象,每个对象有什么方法然后可以把这件事完成面向过程是思考整个流程,多态包括很多方面,比方说泛型,重载等等核心思想就是解耦不能把东西写死,继承是子类继承父类的方法然后把父类的方法具体实现,比方说有一个抽象类动物类它包含跑,叫等方法,但他不会把方法写死,然后会有具体的动物比如猪狗继承这个类然后分别实现自己的跑和叫方法”

面:“你三大特性有一个说错了,没有面向对象,是多态,继承和封装”

正确答案:

      所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
      所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

      所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

重写和重载的区别?

这道题上次问过所以很简单

“方法的重载和重写都是实现多态的方式,区别在于前者实现的是编译时的多态性,而后者实现的是运行时的多态性。重载发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载;重写发生在子类与父类之间,重写要求子类被重写方法与父类被重写方法有相同的参数列表,有兼容的返回类型,比父类被重写方法更好访问,不能比父类被重写方法声明更多的异常。重载对返回类型没有特殊的要求,不能根据返回类型进行区分。”

String类的方法可以重写吗?

面:“String类只有他的子类可以重写它的方法啊,但是好像不存在String的子类吧”

我:“哪我可以写个类继承它吗”“我不知道,但是我感觉不可以,如果String可以被继承然后改方法会出问题吧可能它用final修饰了一下”

面:“它常用的方法有哪些”

我:“很多,比如length(),拼接,分割,转char数组”

面:“对啊,那我不能找个子类继承它然后把这些方法重写掉吗”

我:“理论上可以,但我觉得没这么简单,这么重要得类怎么可能这么容易改”

面:”这不能说是改吧,我继承父类怎么能是改掉父类呢“

我:”确实,但我觉得应该没这么简单,可能用final修饰或者有什么方法组织你改掉它“

面:”为什么要用final修饰?“

我:”防止它被篡改“

面:”你这个回答得有点笼统“

面:”finial可以修饰接口和抽象类吗“

我:”不可以吧“

面:”你确定“

我:”没用过final去修饰接口和抽象类,我一般都是修饰类和变量“

面:”抽象类也是类啊,为什么不能修饰“

正确答案:

String被final修饰了不能被继承,

方法不能被重写的三种情况:

①,父类中用final修饰方法,代表这个方法不能被覆盖;
②,父类中用static修饰方法,这个方法属于静态方法,而重写只适用于实例方法;
③,父类中private修饰方法,也不能 重写,因为私有子类看不到。

final的作用:

修饰类:

表明该类不可被继承,类中的所有成员方法都隐式的被指定为final方法,成员变量则可以定义为final,也可以不定义为final;

修饰方法:

1.锁定这个方法,防止任何继承类修改它的含义;
2.提高效率:在方法前面添加final进行修饰可以提高效率,其原理是基于内联/内嵌(inline)机制,它会使你在调用final方法时,直接将方法的主体插入到调用处,从而省去调用函数所花费的开销。但是如果方法过于庞大或者其中有循环的话,这种提高效率的方法可能会失效。

修饰变量:

在java中,final对变量的修饰的作用,是防止变量值的改变;

final不能修饰接口和抽象类:

抽象类和接口就是用来让其他类实现的如果用final修饰就不能用其他类来实现了。

HashMap和HashTable有什么区别?

这道题见过很多次了,但是只能想起来一个线程安全一个线程不安全

”HashMap和HashTable都是基于键值对嘛,HashMap是线程不安全的,HashTable是线程是线程安全,然后HashMap底层是数组加链表,链表长度大于8数组长度大于64会转成红黑树,HashTable没有涉及红黑树“

正确答案:

  1. 线程安全:HashMap不是线程安全的,而Hashtable是线程安全的。Hashtable的方法大多数是同步的,这意味着它在多线程环境中可以安全地使用,但这也导致了性能上的损失。相比之下,HashMap在多线程中使用时需要额外的同步处理。

  2. null值:HashMap允许键和值为null,而Hashtable则不允许。

  3. 继承的父类:HashMap继承自AbstractMap类,而Hashtable继承自Dictionary类,Dictionary类已经被废弃。

  4. 迭代器:HashMap的迭代器是fail-fast的,这意味着如果在迭代过程中HashMap被结构性地修改,则会抛出ConcurrentModificationException。Hashtable的枚举器(Enumerator)不是fail-fast的。

  5. 哈希值计算:HashMap重新计算键的哈希值以减少冲突,而Hashtable直接使用键的hashCode()。

  6. 扩容机制:当HashMap的大小超过阈值时,它会将容量扩大两倍。Hashtable在扩容时会将容量扩大两倍再加一。

  7. 解决哈希冲突的方式:在JDK 8之前,HashMap和Hashtable都是通过链表来解决哈希冲突的。从JDK 8开始,HashMap在冲突节点较多时会将链表转换为红黑树,这样可以提高搜索效率。而在HashTable中, 都是以链表方式存储

session和cookie有什么区别?使用场景分别是什么?

我:”session是存储在服务端的,cookie是存储在浏览器的,然后cookie是你登录网站会拿你的cookie'和数据库进行匹配,然后找到你的浏览记录然后给你推荐你感兴趣的内容,然后session是存储在服务端,一般用来存储用户id“

面:”比方说登录吧,登录完了之后,登录状态一般怎么保持的一般“

我:”可以用threadlocal保存用户id“

面:”哪浏览器怎么分辨用户呢?“

我:”不太知道“

正确答案:

Session和Cookie的区别?
1、数据存储位置:cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、安全性:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3、服务器性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、数据大小:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、信息重要程度:可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

Session和Cookie的使用场景?

session是一种在服务器端存储使用者数据的技术,每个使用者都有一个唯一的session ID,可以在服务器端查找对应的数据。与客户端存储相比,session的优点在于数据更安全、数据量更大、数据类型更多样化。对于需要高安全性的数据,如使用者密码、银行卡号等;需要大量或复杂的数据,如购物车、订单等;以及需要跨多个页面或请求保持状态的数据,如登录状态、验证码等,使用session可以更好地满足需求。

Cookies是一种存储在客户端的数据机制,每个使用者都有自己的cookie,每个cookie都有名称和值。Cookies的优点包括:减轻服务器压力,因为数据不需要上传到服务器;易于扩展,因为客户端可以访问任意服务器,不需要考虑session的同步或共享;兼容性好,因为大多数浏览器都支持Cookies。Cookies的适用场景包括:不需要高安全性的数据,如使用者偏好、浏览历史等;不需要大量或复杂的数据,如使用者名、昵称等;需要跨域名访问的数据,如第三方广告、统计等。Cookies虽然方便,但也有一些限制,比如每个域名只能有有限数量的Cookies,并且使用者可以随时删除或清除自己的Cookies。

当使用者第一次访问一个网站时,服务器会创建一个新的session,并通过cookie的方式将session的标识符发送给浏览器。浏览器会将这个cookie保存在本地,并在每次请求中都带上这个cookie。当使用者再次访问该网站时,浏览器会把cookie发送给服务器,服务器会根据cookie中的标识符找到对应的session,从而获取使用者的信息。这种结合使用session和cookie的方式可以实现使用者的状态跟踪和身份验证,同时也可以减少服务器的存储压力,提高系统的效率和稳定性。此外,由于cookie是以文本形式存储在本地,因此使用者的个人信息可以得到更好的保护。

讲讲你对Spring的理解?

”spring是一个轻量级框架,实现了控制反转,就是把控制权交给sping容器,比方创建一个bean我们只用加一个注解就可以其他交给容器管理“

正确答案:

控制反转(Inversion of Control, IoC):IoC是一种设计原则,用于减少计算机程序中的耦合。Spring通过其核心容器来实现IoC,让对象的创建和管理变得简单。
依赖注入(Dependency Injection, DI):这是IoC的一个具体实现方式,在Spring框架中,一个类的依赖项不是通过构造函数或setter方法设置的,而是由Spring框架在运行时自动注入的。
面向切面编程(Aspect Oriented Programming, AOP):Spring支持AOP,使得像日志、事务管理等横切关注点可以与业务逻辑分离,从而提高代码的可重用性和可维护性。

索引的作用是什么?

”没有索引要走全表扫描,有索引就可以加快查询速度,索引用B+树的结构它更矮速度就更快(Mysql用的B+树,索引有很多种结构比如哈希表)“

正确答案:

1.数据库索引用于加速查询;

2.索引可以保证每一行的唯一性;

3.虽然哈希索引是O(1),树索引是O(log(n)),但SQL有很多“有序”需求,故数据库使用树型索引;

每个字段都加索引可不可以?

1. 写操作性能下降
插入(INSERT)、更新(UPDATE)、删除(DELETE)等写操作会因为索引的增多而变得更为耗时,因为每次写操作都需要同步更新索引,特别是在频繁写操作的情况下。

2. 存储空间占用增加
每个索引都需要占用一定的存储空间,当索引过多时,会占用大量的存储空间,增加数据库的整体存储需求。

3. 查询性能下降
虽然索引可以加速查询操作,但过多的索引可能会导致索引的失效,使得数据库优化器很难选择到最合适的索引,从而导致查询性能下降。此外,索引过多也可能导致索引之间相互竞争,加剧查询性能下降。

4. 索引维护成本增加
随着索引数量的增加,数据库的索引维护成本也会相应增加。维护成本包括索引的创建、更新、重建和删除等操作,可能需要消耗较多的系统资源和时间。

5. 索引选择困难
当存在大量的索引时,数据库优化器在选择最佳的索引时可能会变得更加困难,这可能导致查询执行计划的选择不够有效,进而影响查询性能。

索引失效的场景?

”不满足最左匹配原则,where子句中有表达式...“

正确答案:

1 联合索引不满足最左匹配原则

2 使用了select *

3 索引列参与运算

4 索引列参使用了函数

5 模糊查询时(like语句),模糊匹配的占位符位于条件的首部

6 类型隐式转换

7 使用OR操作

8 两列做比较

9 不等于比较

10 is not null

11 not in和not exists

12 order by导致索引失效

13 参数不同导致索引失效

参考15个必知的Mysql索引失效场景,别再踩坑了-腾讯云开发者社区-腾讯云

事务的四个特性?并讲讲他们是什么意思?

这个太简单了,早背烂了,我记得数据库考试还考了这道题

”ACID,原子性,一致性,隔离性,持久性。原子性是指事务要么成功要么失败不可能有中间状态,一致性是指事务操作成功后,数据库所处的状态和他的业务规则是一致的,隔离性是指事务之间不会相互影响,持久性是指事务操作成功会持久到磁盘里面“

”好,后面可能还会有二面,主要是业务上的问题“,”好的,谢谢,再见!“

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝味啊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值