2024 年互联网大厂工时排行

今天看到一份互联网公司工作时长排行,有人一周肝工作超过 60h,每天在工位十多个小时兢兢业业;有人享受工作和生活的平衡,每周完美卡点 8 小时工作。

即便都在互联网公司,生活也是截然不同的。

工作时长前 25 的公司,平均每周工作时长都超过了50小时(全文数据均源于duibiao.info):

图片

图片

在 pk 工时上,拼多多没有输过。不过拼多多的时薪,给得也非常大方。同样的统计口径下,拼多多初级工程师时薪中位数达到 258 元,中级工程师的时薪中位数,更是达到了 459 元。

不久前拼多多部分团队刚刚调整了考勤时间,将打卡时间从11-11-6 改成 10-9-6,午餐和晚餐的休息时间调整为 1 小时。看来卷中更有强者。不过拼多多一周工作 6 天,所以理论上说,排名在拼多多后面的几家公司,未必就比在拼多多上班轻松。

图片

当然,有加班的朋友,也有不加班的。

图片

位于排行榜末尾的 13 家互联网公司,平均每周工作时长,最短的还不到 40 小时。

互联网公司的卷王很多,但身体和健康同样重要。作为打工人,大家更喜欢哪一种生活呢?

这份工作时长排行仅供大家做一个参考。毕竟就算是同一家公司,不同部门或是项目组的工作时间也是不一样的。

想要拥有更多的选择权,那就需要自己多多投递,多多面试,手握更多的 offer。

今天也为大家准备了面试题~

MyBatis 写个 Xml 映射文件,再写个 DAO 接口就能执行,这个原理是什么?

回答重点

核心原理是 JDBC 的能力 和 动态代理,通过解析 XML 映射文件和动态生成 DAO 接口实现类来完成 SQL 的执行。

以下是详细的执行原理:

1)加载配置和 Mapper 映射文件:

  • MyBatis 启动时,通过配置文件(mybatis-config.xml)加载数据库连接信息和 Mapper 映射文件(Mapper.xml)。

  • XML 文件中的 SQL 被解析为内部的 MappedStatement 对象,包含 SQL 语句、参数映射规则和返回结果映射规则。

2)动态代理实现 DAO 接口:

  • MyBatis 为每个 DAO 接口生成一个动态代理类(MapperProxy),拦截接口方法调用。

  • 动态代理的核心是根据方法名和参数匹配到对应的 MappedStatement,然后调用 JDBC 来执行 SQL。

3)通过 JDBC 执行 SQL:

  • MyBatis 的 SqlSession 是对 JDBC 的封装,它的核心是使用 PreparedStatement 来完成 SQL 的执行。

  • 根据 XML 中定义的 SQL 和 DAO 接口方法传入的参数,生成完整的 SQL 查询,并将参数通过占位符(?)绑定到 PreparedStatement

  • 最终通过 JDBC 执行 SQL,并获取 ResultSet

4)结果映射:

  • JDBC 的查询结果(ResultSet)会被 MyBatis 的 ResultMapresultType 映射为 DAO 接口方法的返回值类型(如 POJO、Map 或 List)。

扩展知识

MyBatis 与 JDBC 的关系

MyBatis 本质上是对 JDBC 的封装和增强,它的核心执行流程依赖于 JDBC 的 API。

JDBC 原生写法:

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;

try {
   conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db", "user", "password");
   String sql = "SELECT * FROM users WHERE id = ?";
   pstmt = conn.prepareStatement(sql);
   pstmt.setInt(1, 1);
   rs = pstmt.executeQuery();

   while (rs.next()) {
       System.out.println(rs.getString("username"));
   }
} finally {
   if (rs != null) rs.close();
   if (pstmt != null) pstmt.close();
   if (conn != null) conn.close();
}

MyBatis 写法:

SqlSession session = sqlSessionFactory.openSession();
try {
   User user = session.selectOne("findUserById", 1);
   System.out.println(user.getUsername());
} finally {
   session.close();
}

对比:

  • JDBC 手写代码复杂,需要手动管理连接、SQL 拼接和结果映射。

  • MyBatis 自动管理这些步骤,开发者只需编写 SQL 和映射规则,剩下的交给框架完成。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值