第二章 基础算法

简介: 第二章 基础算法

3.2、【问】说说你的项目中,哪里用到了字符串匹配技术
参考回答:
我的项目中,很多地方都会用到字符串匹配技术,主要采用正则匹配,例如:
表单提交时,用它来校验数据,比如邮箱地址、电话号码、身份证号码等
网页爬取时,使用正则抽取网页中的图片链接
日志处理时,提取日志中的特定信息
一些框架的配置路由规则时,是使用正则表达式来定义
数据清洗时,使用正则表达式转换或清洗文本数据
编辑代码时,使用正则来完成搜索或批量替换等操作
P.S.
以上 6 点,不必面面俱到,应该是自己熟悉哪块,就重点准备哪块。
例1:表单校验,例如要校验手机号,则正则写作
解释:
其中 ^ $ 用来匹配开始和结束位置
假设手机号规则是 1 开头,后面 10 位数字,因此这里用 \d{10} 匹配后 10 个数字
例2:网页爬取时,抽取下面 html 代码中的图片链接
正则写作
有一定难度,解释如下
(['"])用来匹配单引号或双引号,最外层的 () 是对它分组,即第一组
与第一组呼应的,\1 代表引用第一组,前面是单引号 \1 就是单引号,前面是双引号 \1 就是双引号
(.+?)是第二组,就是引号中图片地址,其中 ? 用来避免贪婪
(.*?)是第三组,代表 alt 这部分内容
最后遍历每次匹配结果,取到其中第二组,即为图片地址
例3:提取日志文件中的信息
日志文件如下
正则写作
解释:正则表达式共分了 4 组
第一组匹配【请求方法】
第二组匹配【请求路径】,第一个 / 要转义,\S表示非空格字符,不用\w的原因是路径中可能有第二层/
第三组匹配【响应码】
第四组匹配【响应消息】
4、搜索类
4.1、【问】请介绍一下二分查找算法
参考回答:
二分查找也称之为折半查找,是一种在有序数组内查找特定元素的搜索算法,非常高效,时间复杂度是$$O(\log{n}$$
它具体实现步骤是:
定义两个指针 i、j,分别指向有序数组的起始和结束位置
找到指针范围内中间元素
如果目标 < 中间元素,则在左半部分继续搜索
如果目标 > 中间元素,则在右半部分继续搜索
如果目标 = 中间元素,则找到目标,算法结束
参考代码:
4.2、【问】请介绍什么是回溯算法
参考回答:
在求解问题的过程中,要记录每一步的状态,因为接下来的尝试有可能不成功,这时就需要回溯(其实就是撤销)到之前的某一步,换另一种方法继续尝试。
回溯通常结合递归来实现,因为递归栈保存了递归方法上次调用时各个变量的状态,用来实现回溯更为自然
回溯里还有个常见术语叫做剪枝。在递归过程中,通过条件检查减少一些不必要的递归,这称为剪枝
因为多路递归的执行通常用一棵递归树表示,因此术语剪枝非常形象。
回溯举例,$$$$ 皇后问题(在$$N \cdot N$$的棋盘上放置$$$$个皇后,保证同一行、同一列、同一斜线上只有一个皇后)
初始状态(图中白色表示没有冲突可以放置的格子,而红色表示不能放)
第二行,第三列的格子放了一个皇后,可以看到接下来第三行格子冲突了,因此需要进行回溯撤销
回溯到初始状态
这回换成向第二行,第四列的格子放皇后,可以预见,接下来可以有一个解

相关文章
|
4月前
|
Java 测试技术 Linux
生产环境发布管理
在一个大型团队中,生产发布涉及多环境推进(DEV→TEST→PRE→PROD),以及热更新、回滚等问题。本文基于公司自动化部署平台,讲解如何实现多环境部署与发布管理,涵盖各环境职责、分支管理、自动化构建、日志排查等内容,帮助理解大型企业如何通过CI/CD提升发布效率与稳定性。
112 0
|
4月前
|
消息中间件 存储 Java
第15课: Spring Boot中集成ActiveMQ
第15课: Spring Boot中集成ActiveMQ
385 0
|
4月前
|
Java 数据格式 微服务
SpringBoot使用汇总
SpringBoot使用汇总
104 0
SpringBoot使用汇总
|
4月前
|
安全 Java 数据库
第16课:Spring Boot中集成 Shiro
第16课:Spring Boot中集成 Shiro
652 0
|
4月前
|
JSON 前端开发 Java
第05课:Spring Boot中的MVC支持
第05课:Spring Boot中的MVC支持
207 0
|
4月前
|
负载均衡 Dubbo Java
Dubbo篇
Dubbo篇
135 0
|
4月前
|
开发框架 前端开发 Java
Spring篇
Spring是一个用于简化Java企业级应用开发的开源框架,核心功能包括控制反转(IoC)和面向切面编程(AOP)。它通过管理对象生命周期、解耦组件、支持多种注入方式及提供如MVC、事务管理等模块,提升开发效率与代码质量。常用于构建轻量、灵活、易维护的企业级应用程序。
263 0
|
4月前
|
敏捷开发 Dubbo Java
需求开发人日评估
敏捷开发中,工时评估是关键环节,常用“人日”衡量任务工作量。本文介绍人日概念及评估方法,涵盖开发、自测、联调、测试、发布各阶段周期参考,并提供常见需求的人日示例,助力团队更科学地制定计划。
196 0
|
4月前
|
运维 Kubernetes Java
物理部署图
物理部署图用于描述系统运行时的结构,展示硬件配置与软件部署在网络中的方式。它帮助理解分布式系统的部署架构,核心元素包括节点、构建、物件、连接和框架,常用于指导软硬件的协同运行与运维管理。
127 0
|
4月前
|
缓存 JSON 前端开发
第07课:Spring Boot集成Thymeleaf模板引擎
第07课:Spring Boot集成Thymeleaf模板引擎
470 0
第07课:Spring Boot集成Thymeleaf模板引擎
下一篇
开通oss服务