大家好,我是白露啊。
“双非本科一年20w已经是人中龙凤了”……吗?
牛客上刷到这条帖子,我一开始以为是一个钓鱼、引战贴。看完才觉得他说的很对,现在在求职选择工作的时候,网上都觉得得40万、50万,但当真没必要那么焦虑,因为那毕竟是少数。
各位同学,不要被牛客、脉脉等论坛上“公布”的薪资给打击到了,觉得20w以上的工资随手可得,但是轮到自己找工作的时候一塌糊涂。
首先,现在的工作形势确实不好,这是大环境所导致的。时代的一粒尘埃,落在我们的身上,就是一座上。
现在就业形势差到什么地步?连字节跳动准入职的同学都开始吐槽工资低了:
还有很多同学现身说法:
还有同学说的更“直接”:
在这里,我也想和大家分享一下我的经历。
我来自农村,靠着自己的努力考上了985大学。
后面,我又选择继续读研,积累了更多的知识和实践经验,终于在毕业后成功进入大厂工作。
这段经历让我明白,奋斗的过程可能会很艰辛,但只要坚持不懈,总会有回报。
其实不管是双非还是其他学校,不是每个人都能轻松拿到20w以上的薪水,但通过不断提升和积累,才会有可能拿到更高的工资。
希望大家可以找到适合自己的职业路径,不断提升自己,实现职业梦想。今天我们就看一篇字节跳动国际电商的面试,如果不想看,可以直接跳转到文末,有惊喜哦~
字节跳动-国际电商
面试官: 欢迎参加字节跳动国际电商后端开发的面试。我先简单介绍一下我们的部门。我们主要负责国际市场的电商平台开发和运营,包括商品管理、订单处理、支付系统等模块*****。现在请你介绍一下你做过的项目,特别是短链接这个项目?
求职者: 当然。短链接项目是我在实习期间参与的一个项目。我们的目标是为公司内部和外部的营销活动提供短链接服务,以提高链接的易用性和追踪效果。项目背景是我们发现长链接在分享和传播过程中不够方便,也不易于统计点击数据。为了解决这个问题,我们设计并实现了一个短链接生成和管理系统。
面试官: 短链接存储和生成的原理是什么?
求职者: 对于短链接的存储,我们使用Redis作为主要的存储数据库,因为它提供了高性能和持久化的特性。每个短链接和长链接的映射关系都存储在Redis中。短链接的生成,我们采用了哈希算法,将长链接哈希成一个较短的字符串。同时,为了避免冲突,我们会检查生成的短链接是否已存在,如果存在,则进行一定的调整。
面试官: 短链接如何实现跳转到长链接?
求职者: 当用户访问短链接时,我们的服务会先从Redis中查询短链接对应的长链接。如果查找成功,服务会返回一个HTTP 302重定向响应,将用户的浏览器重定向到长链接指向的地址。这个过程对用户来说是透明的。
面试官: 如果某个短链接成为热key,你们是如何解决的?
求职者: 面对热key问题,我们采取了几种策略。首先是使用本地缓存来缓解对Redis的访问压力,对于高频访问的短链接,我们会将其长链接缓存到应用服务器的内存中。此外,我们还采用了负载均衡和读写分离的策略来提高系统的可用性和扩展性。
面试官: 本地缓存和Redis的区别是什么?
求职者: 本地缓存是存储在应用服务器内存中的缓存,访问速度非常快,但是只能被单个服务器访问,不具备数据共享能力。而Redis是一个分布式的内存数据库,可以被多个服务器共享访问,支持数据的持久化和复制。本地缓存适合存储热数据和会话信息,Redis适合作为共享数据存储和实现高效的数据访问。
面试官: 使用本地缓存HashMap时,用什么来保证线程安全?
求职者: 使用HashMap作为本地缓存时,我们可以通过ConcurrentHashMap来保证线程安全。ConcurrentHashMap是Java提供的一个线程安全的HashMap实现,它通过分段锁的机制来减少锁的竞争,从而提高并发访问的性能。
面试官: ConcurrentHashMap是怎么保证线程安全的?
求职者: ConcurrentHashMap通过将内部数据分割成多个段(Segment),每个段独立加锁,实现了高效的并发访问控制。当进行插入、删除、更新操作时,只需要锁定对应的段,而不是整个Map,这样就大大减少了锁的竞争,提高了并发性能。
面试官: 来,手撕一道题:无重复字符的最长子串。
求职者: 好的,为了解决“无重复字符的最长子串”这个问题,我们可以采用滑动窗口的方法。基本思路是使用两个指针表示字符串中的某个子串(窗口),然后移动右指针扩大窗口直到遇到重复字符,接着移动左指针缩小窗口跳过重复字符,过程中记录并更新最大窗口大小。
import java.util.HashMap;
public class Solution {
public int lengthOfLongestSubstring(String s) {
int maxLen = 0;
HashMap<Character, Integer> map = new HashMap<>();
for (int start = 0, end = 0; end < s.length(); end++) {
char currentChar = s.charAt(end);
if (map.containsKey(currentChar)) {
start = Math.max(map.get(currentChar) + 1, start);
}
map.put(currentChar, end);
maxLen = Math.max(maxLen, end - start + 1);
}
return maxLen;
}
}
这个解题方法的时间复杂度是O(n),n是字符串的长度。尽管存在嵌套循环,但是每个字符最多被访问两次(一次是右指针移动时,一次是左指针移动时)。
面试官: 很好,你的表现很不错,今天就到这吧。