Java架构师之面试题

简介: Elasticsearch

21、介绍下你们电商搜索的整体技术架构。

image.png

22、介绍一下你们的个性化搜索方案?

23、是否了解字典树? 常用字典数据结构如下所示:

image.png

Trie 的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以 达到提高效率的目的。它有 3 个基本性质:

1、根节点不包含字符,除根节点外每一个节点都只包含一个字符。

2、从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。

3、每个节点的所有子节点包含的字符都不相同。

image.png

1、可以看到,trie 树每一层的节点数是 26^i 级别的。所以为了节省空间,我们 还可以用动态链表,或者用数组来模拟动态。而空间的花费,不会超过单词数×单 词长度。

2、实现:对每个结点开一个字母集大小的数组,每个结点挂一个链表,使用左儿 子右兄弟表示法记录这棵树;

3、对于中文的字典树,每个节点的子节点用一个哈希表存储,这样就不用浪费太 大的空间,而且查询速度上可以保留哈希的复杂度 O(1)。

24、拼写纠错是如何实现的?

1、拼写纠错是基于编辑距离来实现;编辑距离是一种标准的方法,它用来表示经 过插入、删除和替换操作从一个字符串转换到另外一个字符串的最小操作步数;

2、编辑距离的计算过程:比如要计算 batyu 和 beauty 的编辑距离,先创建一个 7×8 的表(batyu 长度为 5,coffee 长度为 6,各加 2),接着,在如下位置填入 黑色数字。其他格的计算过程是取以下三个值的最小值: 如果最上方的字符等于最左方的字符,则为左上方的数字。否则为左上方的数字 +1。(对于 3,3 来说为 0) 左方数字+1(对于 3,3 格来说为 2) 上方数字+1(对于 3,3 格来说为 2)

最终取右下角的值即为编辑距离的值 3。

image.png

对于拼写纠错,我们考虑构造一个度量空间(Metric Space),该空间内任何关 系满足以下三条基本条件:

d(x,y) = 0 -- 假如 x 与 y 的距离为 0,则 x=y

d(x,y) = d(y,x) -- x 到 y 的距离等同于 y 到 x 的距离

d(x,y) + d(y,z) >= d(x,z) -- 三角不等式

1、根据三角不等式,则满足与 query 距离在 n 范围内的另一个字符转 B,其与 A 的距离最大为 d+n,最小为 d-n。

2、BK 树的构造就过程如下:每个节点有任意个子节点,每条边有个值表示编辑 距离。所有子节点到父节点的边上标注 n 表示编辑距离恰好为 n。比如,我们有棵树父节点是”book”和两个子节点”cake”和”books”,”book”到”books” 的边标号 1,”book”到”cake”的边上标号 4。从字典里构造好树后,无论何 时你想插入新单词时,计算该单词与根节点的编辑距离,并且查找数值为 d(neweord, root)的边。递归得与各子节点进行比较,直到没有子节点,你就可 以创建新的子节点并将新单词保存在那。比如,插入”boo”到刚才上述例子的树 中,我们先检查根节点,查找 d(“book”, “boo”) = 1 的边,然后检查标号为 1 的边的子节点,得到单词”books”。我们再计算距离 d(“books”, “boo”)=2, 则将新单词插在”books”之后,边标号为 2。

3、查询相似词如下:计算单词与根节点的编辑距离 d,然后递归查找每个子节点 标号为 d-n 到 d+n(包含)的边。假如被检查的节点与搜索单词的距离 d 小于 n, 则返回该节点并继续查询。比如输入 cape 且最大容忍距离为 1,则先计算和根的 编辑距离 d(“book”, “cape”)=4,然后接着找和根节点之间编辑距离为 3 到 5 的,这个就找到了 cake 这个节点,计算 d(“cake”, “cape”)=1,满足条件 所以返回 cake,然后再找和 cake节点编辑距离是 0 到 2 的,分别找到 cape 和 cart 节点,这样就得到 cape 这个满足条件的结果。

image.png

相关文章
|
2天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
14 2
|
7天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
13天前
|
存储 缓存 Oracle
Java I/O流面试之道
NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。
Java I/O流面试之道
|
9天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
32 4
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
45 4
|
21天前
|
存储 Java
[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?
本文介绍了Java中`try...catch...finally`语句的使用细节及返回值问题,并探讨了JDK1.7引入的`try...with...resources`新特性,强调了异常处理机制及资源自动关闭的优势。
18 1
|
20天前
|
算法 Java
JAVA 二叉树面试题
JAVA 二叉树面试题
14 0
|
6月前
|
消息中间件 架构师 算法
java架构师面试题及答案
java架构师面试题及答案
|
6月前
|
设计模式 消息中间件 缓存
2024年Java架构师面试宝典 图文并茂 10G面试题 请收藏
2024年Java架构师面试宝典 图文并茂 10G面试题 请收藏
812 1
|
架构师 网络协议 Java
严禁外传!字节跳动2023春招Java岗位架构师面试题(暂定版)发布
说来说去废话也是那么多,今天小编实在是不想写前言了“原谅我一次”让我任性一回!
166 0