你舔的HR,也许在舔别人

沉默王二

共 8071字,需浏览 17分钟

 · 2024-04-18

大家好,我是二哥呀。

牛客上刷到这条帖子:“你添的 HR,也许在添别人”,牛友把学校改成浙大后,一大波 HR 争先恐后地“我们公司正在招贤纳士,求一份你的简历啊!”

甚至还有贴心的牛友将其总结成了样板代码:

if (学校 equals 985) {
    HR.sendMessageToyou("求一份简历")
}
else {
    if (youSendResumeToHR().学校 not equals 985)
        print("您的简历与职位不匹配"
     }

估计很多 211、双非的同学看到这就直接破防了,但我还是想给大家加加油打打气,只要你有计划有目标的执行,结果就不会差。因为 985 的同学还是极少数,要知道我们河南省就一所 211(😭)

星球里去年就有很多双非的同学,最后秋招的结果都很不错。就像下面球友,我相信他研二秋招的时候也一定能够拿到理想的 offer,不然你过来把我脸打肿,我绝不还手。

还是那句话,踏踏实实准备,自助者天助之。如果你能够按照我的要求把 Java 后端四大件吃透,搞两个项目,一个业务一个轮子,LeetCode 刷个 200 题,计算机网络和操作系统中常见的那几个八股背会(面渣逆袭上有标注),校招就能轻松拿捏~

好,这次我们就以球友向往的宇宙厂字节跳动为例,来看看同学 3 的 Java 后端二面为例,来看看字节面试官都喜欢问哪些问题。

大家在准备的时候一定要有的放矢,内容较长,建议大家先收藏起来,面试的时候大概率会碰到,我会尽量用通俗易懂+手绘图的方式,让天下所有的面渣都能逆袭 😁

字节跳动面经(详细)

什么是三大范式,为什么要有三大范式,什么场景下不用遵循三大范式,举一个场景

三大范式的作用是为了减少数据冗余,提高数据完整性。

三分恶面渣逆袭:数据库三范式

①、第一范式(1NF):确保表的每一列都是不可分割的基本数据单元,比如说用户地址,应该拆分成省、市、区、详细信息等 4 个字段。

Ruthless:第一范式

②、第二范式(2NF):在 1NF 的基础上,要求数据库表中的每一列都和主键直接相关,而不能只与主键的某一部分相关(主要针对联合主键)。

比如说在一个订单表中,可能会存在订单编号和商品编号,设计出来的表可能是这样的。

Ruthless:不符合第二范式

这个订单表中就存在冗余数据,比如说商品名称、单位、商品价格等,应该将其拆分为订单表、订单商品关联表、商品表。

Ruthless:订单商品关联表

③、第三范式(3NF):在 2NF 的基础上,消除非主键列对主键的传递依赖,即非主键列只依赖于主键列,不依赖于其他非主键列。

比如说在设计订单信息表的时候,可以把客户名称、所属公司、联系方式等信息拆分到客户信息表中,然后在订单信息表中用客户编号进行关联。

Ruthless:第三范式

在实际开发过程中,三大范式有时候反而成为了老太婆的裹脚布,让表的设计变得复杂而又啰嗦,就像第二范式中提到的订单详情表,把商品价格和名称放在订单表中可以减少额外的 JOIN 操作,提高查询效率。

什么是SQL注入,怎么避免,什么是参数化

SQL 注入是一种代码注入技术,通过在输入字段中插入专用的 SQL 语句,从而欺骗数据库执行恶意 SQL,从而获取敏感数据、修改数据,或者删除数据等。

比如说有这样一段代码:

studentId = getRequestString("studentId");
lookupStudent  = "SELECT * FROM students WHERE studentId = " + studentId

用户在输入框中输入 117 进行查询:

cloudflare:SQL 查询

实际的 SQL 语句类似于:

SELECT * FROM students WHERE studentId = 117

这是我们期望用户输入的正确方式。但是,如果用户输入了117 OR 1=1,那么 SQL 语句就变成了:

SELECT * FROM students WHERE studentId = 117 OR 1=1

由于1=1为真,所以这个查询将返回所有学生的信息,而不仅仅是 ID 为 117 的学生。

cloudflare:SQL 注入

为了防止 SQL 注入,可以采取以下措施:

①、使用参数化查询

使用参数化查询,即使用PreparedStatement对象,通过setXxx方法设置参数值,而不是通过字符串拼接 SQL 语句。这样可以有效防止 SQL 注入。

String query = "SELECT * FROM users WHERE username = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, userName);  // userName 是用户输入
ResultSet rs = pstmt.executeQuery();

? 是一个参数占位符,userName 是外部输入。这样即便用户输入了恶意的 SQL 语句,也只会被视为参数的一部分,不会改变查询的结构。

②、限制用户输入

对用户输入进行验证和过滤,只允许输入预期的数据,不允许输入特殊字符或 SQL 关键字。

③、使用 ORM 框架

比如,在 MyBatis 中,使用#{}占位符来代替直接拼接 SQL 语句,MyBatis 会自动进行参数化处理。

<select id="selectUser" resultType="User">
  SELECT * FROM users WHERE username = #{userName}
</select>

假如 userName 传入的值是 9;DROP TABLE SYS_USER;,传入的删除表 SQL 也不会执行,因为它会被当作参数值。

SELECT * FROM users WHERE username = '9;DROP TABLE SYS_USER;'

mysql怎么存emoji,怎么编码

MySQL 的 utf8 字符集仅支持最多 3 个字节的 UTF-8 字符,但是 emoji 表情(😊)是 4 个字节的 UTF-8 字符,所以在 MySQL 中存储 emoji 表情时,需要使用 utf8mb4 字符集。

ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

MySQL 8.0 已经默认支持 utf8mb4 字符集,可以通过 SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; 查看。

二哥的 Java 进阶之路

什么是深分页,select * from tbl limit 1000000000这个有什么问题,如果表大或者表小分别什么问题

深分页指的是在分页查询中,请求的页数非常大,例如请求第100万页的数据。在这种情况下,数据库需要跳过前999999页的数据,会消耗大量的CPU和I/O资源,导致查询性能下降。

select * from tbn limit 1000000000 正是一个深分页查询。

  • 如果表的数据量非常大,那么这个查询可能会消耗大量的内存和CPU资源,甚至可能导致数据库崩溃。
  • 如果表的数据量非常小,比如说只有 100 条,那就会返回这前 100 条,虽然没什么性能影响,但这个查询本身没什么意义。

一个表(name, sex,age,id),select age,id,name from tblname where name='paicoding';怎么建索引

索引的建立应当基于查询中的过滤条件(WHERE 子句)以及查询的选择列(SELECT 子句)。

由于查询条件是name='paicoding',所以应当为name字段建立索引。

CREATE INDEX idx_name ON tblname(name);

查询中选择了ageidname字段,如果这三列经常一起使用,可以考虑建立包含这些字段的联合索引。可以将查询条件中的字段放在联合索引的首位,这样查询时可以利用索引覆盖,直接从索引中获取数据,而不需要再去查找数据行。

CREATE INDEX idx_name_age_id ON tblname (name, age, id);

http和https的区别,https是怎么建立连接,https是对称还是非对称加密

  1. HTTPS 是 HTTP 的增强版,在 HTTP 的基础上加入了 SSL/TLS 协议,确保数据在传输过程中是加密的。SSL/TLS 需要向 CA(证书权威机构)申请数字证书,用于验证服务器的身份。
  2. HTTP 的默认端⼝号是 80,URL 以http://开头;HTTPS 的默认端⼝号是 443,URL 以https://开头。

HTTPS 的连接建立在 SSL/TLS 握手之上,主要分为以下几个步骤:

①、客户端向服务器发起请求

②、服务器接收到请求后,会返回自己的数字证书,包含了公钥、颁发机构等信息。

③、客户端收到服务器的数字证书后,会验证证书的合法性,如果合法,就会生成一个随机码,然后用服务器的公钥加密这个随机码,发送给服务器。

④、服务器收到会话密钥后,用私钥解密,得到会话密钥。

⑤、客户端和服务器通过会话密码对通信内容进行加密,然后传输。

如果通信内容被截取,但由于没有会话密钥,所以无法解密。当通信结束后,连接会被关闭,会话密钥也会被销毁,下次通信会重新生成一个会话密钥。

HTTPS 在不同阶段会使用不同的加密方式:

  • 非对称加密:在握手阶段使用,特别是在密钥交换过程中。非对称加密使用公钥和私钥,其中公钥可以公开,私钥保密。客户端使用公钥加密信息,服务器使用私钥解密。
  • 对称加密:在完成握手后,所有的数据传输都使用对称加密。对称加密使用相同的密钥进行加密和解密,这种加密方式比非对称加密更快。

http的响应号有哪些

HTTP 响应状态码是由服务器返回给客户端,用于表示对请求的响应结果。

这些状态码分为五个不同的类别,每个类别用一个数字开头,共有三位数:

  • 1XX:临时的响应,客户端应继续请求。
  • 2XX:请求已成功被服务器接收。
  • 3XX:用来重定向。
  • 4XX:请求可能出错。
  • 5XX:服务器在尝试处理请求时发生了错误。
三分恶面渣逆袭:常见 HTTP 状态码

http有哪些方法,http的get方法可以实现写操作吗,https传递url安全吗,为什么数据在浏览器中,中间人攻击是什么

HTTP 协议定义了多种请求方式,用以指示请求的目的。常见的请求方式有 GET、POST、DELETE、PUT。

三分恶面渣逆袭:HTTP 请求方式
  • GET:请求检索指定的资源。应该只用于获取数据,并且是幂等的,即多次执行相同的 GET 请求应该返回相同的结果,并且不会改变资源的状态。
  • POST:向指定资源提交数据,请求服务器进行处理(如提交表单或上传文件)。数据被包含在请求体中。可能会创建新的资源或修改现有资源。
  • DELETE:删除指定的资源。
  • PUT:用于替换指定的资源。如果指定的资源不存在,创建一个新资源。

HTTP 的 GET 方法可以实现写操作吗?

可以是可以,但是不推荐。

使用 GET 执行写操作可能导致严重的安全问题,如跨站请求伪造(CSRF)。

实际开发中,也应该杜绝使用 GET 方法执行写操作。在技术派实战项目中,我们会在接口上明确规定应该使用哪种请求方式。

技术派实战项目源码

客户端一旦使用错误❎,将会收到一个 405 Method Not Allowed 的响应。

HTTPS 会加密 URL 吗?

HTTPS 通过 SSL/TLS 协议确保了客户端与服务器之间交换的数据被加密,这包括 HTTP 头部和正文。

而 URL 是 HTTP 头部的一部分,因此这部分信息也是加密的。

人人编程网:HTTP 协议请求报文

但因为涉及到 SSL 握手的过程,所以域名信息会被暴露出来,需要注意。

小林:server name

另外,完整的 URL 可能在 Web 服务器的日志中记录,这些日志可能是明文的。还有,URL 在浏览器历史记录中也是可见的。

因此,敏感信息永远不应该通过 URL 传递,即使是在使用 HTTPS 的情况下。

什么是中间人攻击?

中间人攻击(Man-in-the-Middle, MITM)是一种常见的网络安全威胁,攻击者可以在通信的两端插入自己,以窃取通信双方的信息。

维基百科

在很多电影中,都会存在这样的场景:主角通过某种方式,将自己伪装成中间人,然后窃取通信双方的信息,阿汤哥的碟中谍中就有很多类似的手笔。

中间人攻击是一个缺乏相互认证的攻击,因此大多数加密协议都会专门加入一些特殊的认证方法,以防止中间人攻击。像 SSL 协议,就是通过验证服务器的数字证书,是否由 CA(权威的受信任的数字证书认证机构)签发,来防止中间人攻击的。

参考链接

  • 三分恶的面渣逆袭:https://javabetter.cn/sidebar/sanfene/nixi.html
  • 二哥的 Java 进阶之路:https://javabetter.cn

ending

一个人可以走得很快,但一群人才能走得更远。二哥的编程星球已经有 5000 多名球友加入了,如果你也需要一个良好的学习环境,戳链接 🔗 加入我们吧。这是一个编程学习指南 + Java 项目实战 + LeetCode 刷题的私密圈子,你可以阅读星球专栏、向二哥提问、帮你制定学习计划、和球友一起打卡成长。

两个置顶帖「球友必看」和「知识图谱」里已经沉淀了非常多优质的学习资源,相信能帮助你走的更快、更稳、更远

欢迎点击左下角阅读原文了解二哥的编程星球,这可能是你学习求职路上最有含金量的一次点击。

最后,把二哥的座右铭送给大家:没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。共勉 💪。

浏览 126
10点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
10点赞
评论
收藏
分享

手机扫一扫分享

举报