尚硅谷 Java面试题 第一季 - 20181221 (2)

先切换到主干 git checkout master
git branch -D <分支名>

在这里插入图片描述

工作流:
master分支,分出多个develop分支,并行开发互不影响;出现bug了,可以有master分出一个临时分支,处理完后再合并到master中合并上线;之后将临时分支合并到develop分支,保证版本一致,避免bug重复出现。
开发人员开发完成了,先合并到dev分支,创建测试分支进行测试,没问题了在合并到master上线,之后再和dev合并保证一致。

三、redis持久化几种类型及区别?

两种:

RDB(Redis DataBase)快照,将所有内存数据进行全量保存 ;优点:省空间,效率高;缺点:数据量大耗性能,最后一次持久化可能数据丢失

AOF(Append Of File)日志,以日志形式来记录每个写操作增量操作 ;优点:备份稳健,可读日志处理误操作;缺点:占更多磁盘,备份慢,占性能

四、Mysql建索引的时机?

MySQL官方定义:索引(Index)是帮助MySQL高效获取数据的数据结构。简而言之,索引本质是数据结构。

优:提高检索效率,降低数据库IO成本;通过索引列对数据进行排序,降低排序成本,降低cpu消耗。

劣:降低更新表的速度,因为更新表时,不仅要保存数据,还要保存索引更新了的索引列字段,不断调整索引信息。

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也要占用空间

创建索引

主键自动唯一、频繁查询字段、外键关联字段、组合索引性价比高、排序字段、统计或分组字段(分组更伤性能)

不创建索引

表记录太少、频繁增删改、where用不到字段、过滤性不好字段(例:性别)

五、JVM垃圾回收机制 - GC发生在JVM哪部分,有几种GC,它们的算法是什么?

GC发生在heap堆中。
GC是分代收集算法:频繁收集年轻代``Minor GC、次数较少老年代``Full GC、永久区不GC
GC的四大算法:

引用回收算法(对象有引用,就不回收,已淘汰,无法处理循环引用)

复制算法(发生在YG、效率高,无碎片,占空间)

标记清楚(发生在OG、省空间,产生碎片)

标记压缩(OG、成本高)

标记清除压缩(OG、③④混合)

Java项目 一、redis在项目中的使用场景 (各数据类型)

String
绑定ip地址,可以记录ip地址的操作。

Hash
存储用户信息【id,name,age】
Hset(key,field,value)
Hset(userKey,id,101)
当我修改用户信息某一项属性的时候,可以直接取出单一的值。
不建议使用String类型是因为,在反序列化时,会全部序列化出来,会增加IO次数,降低性能。

List
实现最新消息的排行,
还可以利用List的push命令,将任务存在list集合中,同时使用另一个命令,将任务从集合中取出[pop]。
Redis — List 数据类型来模拟消息队列。【电商中的秒杀就可以采用这种方式来完成一个秒杀活动】

Set
特殊之处:可以自动排重(非重复)。比如说微博中将每个人的好友存在集合(Set)中,
这样求两个人的共通好友的操作。我们只需要求交集即可。

Zset (SortedSet)
以某一个条件为权重,进行排序。 京东:商品详情的时候,都会有一个综合排名,还可以按照价格进行排名。

二、ES和solr的区别?

它们都是基于Lucene搜索服务器基础上开发,高性能的企业级搜索服务。【它们都是基于分词技术构建的倒排索引方式进行查询】
区别:

当实时建立索引的时候,solr会产生io阻塞,而es则不会,es查询性能高于solr。

在不断动态添加数据的时候,solr的检索效率会下降,es则不会。

Solr利用zk进行分布式管理,es自身带有分布式系统管理功能。Solr的本质是web项目,需要部署到web服务器上,启动服务器时需配置solr。

Solr支持更多的格式数据[xml、json、csv],而es仅支持json文件格式。

Solr是传统搜索应用的有力解决方案,但是es更适合新兴实时搜索应用。【solr适合已有数据搜索时,效率更好;需要动态增添数据时,es效率更高】

solr的观望提供功能更多,es更注重核心搜索功能,高级功能需要三方集成。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzdjjf.html