最新要闻
- 敢情是什么意思?_敢情是什么意思方言那敢情好啊是什么意思
- 甲苯与氯气在光照下反应主要生成一氯代物_甲苯与氯气在光照下反应主要生成 最资讯
- 实时:硅料价格连续四周降幅超10%机构:判断供应链将进入负反馈阶段
- 精选!录制宏功能为7×50+5要怎么录制_录制宏是什么意思
- 诗经国风卫风木瓜_卫风木瓜
- 每日快播:刚赚钱就全国9.9元 瑞幸哪来的勇气?
- 家长网友建议高考期间高铁降速 官方回应:不行
- 焦点热文:14万元的比亚迪在海外乱杀 比国内贵十几万依然销量第一
- 侵犯特斯拉名誉权败诉后博主拒不道歉 陶琳无奈发文
- 再次对接天舟五号:中国空间站空前庞大!
- 焦点速讯:苹果查看电池充电次数快捷指令
- 美股异动丨Coinbase大跌20% 被SEC起诉违反美国证券法
- Xiaomi 12 Pro影像_天天热消息
- 中庸之道的理论基础是_中庸之道的理论基础
- 环球要闻:给足诚意乘胜追击 比亚迪汉DM-i/DM-p双车试驾
- 江西一男子花9万元全款购车 等了两年多才发现是骗局
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
天天热门:美团太狠:接口被恶刷10Wqps,怎么防?
文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版为您奉上珍贵的学习资源 :
(相关资料图)
免费赠送 :《尼恩Java面试宝典》持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备免费赠送 :《尼恩技术圣经+高并发系列PDF》,帮你 实现技术自由,完成职业升级, 薪酬猛涨!加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷1)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷2)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷3)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 加尼恩领取
美团太狠:接口被恶刷10Wqps,怎么防?
背景说明:
在40岁老架构师 尼恩的读者社区(50+)中,最近有小伙伴拿到了一线互联网企业如美团、极兔、有赞、希音、百度、网易、滴滴的面试资格,遇到一几个很重要的面试题:
近段时间,有小伙伴面试美团,说遇到一个去重 调优的面试题:
接口被狂刷10Wqps,怎么解决?
MYsql 设计的时候,如何高性能进行数据去重,也是调优的重点和难点,社区中,还遇到过大概的变种:
形式1:短信验证码接口,如何防刷?
形式2:登录注册入口被恶意调用攻击,该如何破解?
形式3:接口被恶意狂刷,怎么办?
形式4:........, 后面的变种很多,都会收入 《尼恩Java面试宝典》。
这里尼恩给大家 对数据去重的 调优,做一下系统化、体系化的梳理,使得大家可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”。
也一并把这个 题目以及参考答案,收入咱们的《尼恩Java面试宝典》V75,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。
注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请到公号【技术自由圈】获取。
本文目录
目录- 美团太狠:接口被恶刷10Wqps,怎么防?
- 背景说明:
- 本文目录
- 接口被狂刷的严重后果
- 接口狂刷的主要防护措施:
- 交互式验证
- 安全参数校验
- 使用 HTTPS
- 用户访问认证
- 资源访问授权
- 访问限流
- IP封禁
- 日志监控和异步分析
- 升级硬件设备
- 基于时序的统计预警
- 说在最后:有问题可以找老架构取经
- 技术自由的实现路径:
- 实现你的 架构自由:
- 实现你的 响应式 自由:
- 实现你的 spring cloud 自由:
- 实现你的 linux 自由:
- 实现你的 网络 自由:
- 实现你的 分布式锁 自由:
- 实现你的 王者组件 自由:
- 实现你的 面试题 自由:
- 获取11个技术圣经PDF:
接口被狂刷的严重后果
恶意攻击者通常会通过自动化工具进行攻击,尤其是会针对一些高频接口、核心接口进行恶意的访问,恶意的攻击,比如:
- 注册登录接口
- 秒杀抢购接口
- 等等
接口被狂刷会带来很高的瞬时吞吐量,很容易超过1Wqps,甚至10WQPS。这样的超高并发,会导致系统的瞬时雪崩,严重的可能会导致线上系统 瘫痪。
接口狂刷的主要防护措施:
- 交互式验证
- 安全参数校验
- 使用 HTTPS
- 用户访问认证
- 资源访问授权
- 访问限流
- IP封禁
- 日志监控和异步分析
- 升级硬件设备
- 基于时序的统计预警
交互式验证
主要包括:
验证码验证:在发送验证码之前,可以要求用户输入一个验证码,以验证用户的身份。这种方式可以有效地防止自动化攻击。
人机验证:人机验证是一种更高级的验证方式,可以检测用户行为是否类似于自动化攻击。例如,可以要求用户在发送验证码之前完成一个简单的任务,如拖动滑块或识别图片中的文字。
安全参数校验
当接口被恶意狂刷时,可以通过安全参数校验来防止这种攻击。安全参数校验是指在接口请求中添加一些校验参数,例如时间戳、随机字符串、签名等,来验证请求的合法性。这样可以防止攻击者通过恶意程序进行大量的请求攻击。
具体来说,可以通过以下步骤来实现安全参数校验:
- 在接口请求中添加时间戳参数,例如:
timestamp=1622945123
。 - 在接口请求中添加随机字符串参数,例如:
nonce=abc123
。 - 将所有请求参数按照参数名的字母顺序排序,例如:
nonce=abc123×tamp=1622945123
。 - 将排序后的参数按照“参数名=参数值”的格式拼接成一个字符串,例如:
nonce=abc123×tamp=1622945123
。 - 将拼接后的字符串加上一个密钥(可以是预先约定好的密钥),例如:
nonce=abc123×tamp=1622945123&key=secret
。 - 对加密后的字符串进行哈希计算,例如使用 MD5 算法,得到一个签名值,例如:
c0c3f9a2a4c4c4dcd6d5b7b2a2e4d7b1
。将签名值添加到接口请求中,例如:nonce=abc123×tamp=1622945123&signature=c0c3f9a2a4c4c4dcd6d5b7b2a2e4d7b1
。 - 在接口服务端对接口请求进行校验时,按照相同的算法计算签名值,并与请求中的签名值进行比对,如果一致,则说明请求合法,否则说明请求不合法。
通过以上步骤,可以有效地防止接口被恶意狂刷的攻击。
理论上,哈希计算很难破解,但是如果攻击者知道了hash算法和盐,攻击者就有可能伪造出带有正确校验位的签名值,从而绕过Java接口的限流和安全机制。
因此,该方案主要适用于需要简单防范一些低强度攻击的场景,例如防范垃圾请求或非法爬虫等。
对于高强度攻击,建议采取更为复杂的验证策略,例如使用使用用户访问认证,资源访问授权、IP白名单、签名算法等。
使用 HTTPS
使用 HTTPS 可以保护数据传输的安全性,可以防止恶意攻击者窃取数据。HTTPS 使用 SSL/TLS 协议对数据进行加密,可以确保数据在传输过程中不被篡改或窃取。
因此,在一些恶意狂刷的高频接口,比如短信验证码接口、登录注册入口等敏感区域使用 HTTPS 是必要的。
当然,尽量在客户端和服务端在全部通讯,都使用HTTPS协议进行加密,防止数据被窃听或篡改。
用户访问认证
用户访问认证是指在系统中验证用户身份以授权其访问系统资源的过程。
用户访问认证是信息安全中非常重要的一环,可以保护系统免受未经授权的访问和攻击。
常见的用户访问认证方式包括用户名密码认证、双因素认证、证书认证等
这里来看最为简单的 用户访问认证: 用户名密码认证
用户名密码认证 的方式,要求用户提供 用户名和密码,换取 访问的令牌。
参考的代码如下:
@RequestMapping("/api/login")public String login(@RequestParam("username") String username, @RequestParam("password") String password){ if(!checkUser(username, password)){ return "用户名或密码错误"; } String token = getToken(); saveToken(token); return token;} private boolean checkUser(String username, String password){ //校验用户是否合法} private String getToken(){ //生成token} private void saveToken(String token){ //保存token}
在上述代码中,当用户调用login接口时,需要提供用户名和密码。
此时会进行用户校验,若校验失败则返回错误信息,否则生成token并保存,最终返回给用户。
生成Token的作用是为了在接口请求时验证用户身份。
具体来说,当用户第一次登录系统后,该接口可以根据用户信息生成一个Token字符串,并将其保存至服务端或客户端。
当此用户访问其他需要鉴权的接口时,需要在请求头中带上这个Token字符串,以便服务器进行身份验证。
由于Token是由服务端生成的,攻击方无法自己生成有效的Token,因此只有拥有合法Token的用户才能成功调用相关接口。
对于Java接口被恶意狂刷问题,Token的作用是防止非法请求。
如果Token验证失败,则返回错误信息并拦截该请求。
关于Token的验证,可以通过拦截器实现。
拦截器可以在接口调用前检查请求头中是否包含合法的Token,并验证Token是否过期、是否被篡改等。
下面是使用拦截器进行令牌校验的示例代码:
// 鉴权拦截器public class AuthInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token = request.getHeader("Authorization"); if (token == null || !checkToken(token)) { response.setStatus(HttpStatus.UNAUTHORIZED.value()); return false; } return true; } private boolean checkToken(String token) { // 验证Token是否合法,是否过期等 }}
AuthInterceptor类是拦截器类,用于检查请求头中的Token是否合法。
如果Token验证失败,则返回401错误码并拦截该请求。
资源访问授权
如果接口的安全性要求非常高,只有特定的用户才能访问。
或者说,如果遇到要对资源进行更细粒度的 防刷处理,可以对资源进行访问权限的管理和授权。 主要的策略有RBAC的机制。
主要的思路为:使用 访问控制策略 对资源权限进行 精准控制。场景的访问控制策略 为RBAC策略。
RBAC(Role-Based Access Control,基于角色的访问控制)是一种常见的访问控制策略,它将用户分配到不同的角色中,每个角色具有一组权限,从而控制用户对系统资源的访问。
在 RBAC 中,管理员可以根据用户的职责和职位,将用户分配到适当的角色中,从而控制用户对系统资源的访问权限。RBAC 还可以提高系统的安全性和可管理性,减少权限管理的复杂性。
Shiro 是一个强大且易于使用的 RBAC 访问的安全框架,提供了身份验证、授权、加密、会话管理等安全功能。其中授权是 Shiro 的核心功能之一,它可以帮助我们实现资源访问授权。
在 Shiro 中,授权是通过授权信息和角色信息来实现的。授权信息是指哪些用户可以访问哪些资源,角色信息是指用户可以拥有哪些权限。
Shiro 中的授权流程如下:
- 用户登录系统,进行身份认证。
- 身份验证成功后,Shiro 将用户信息存储在 Subject 中。
- 用户请求访问某个资源。
- Shiro 从 Subject 中获取用户信息,并根据用户信息和授权信息判断用户是否有权限访问该资源。
- 如果用户有权限访问该资源,则允许访问;否则拒绝访问。
在 Shiro 中,授权信息和角色信息可以通过配置文件或数据库来管理。我们可以在配置文件或数据库中定义哪些用户可以访问哪些资源,以及哪些角色可以拥有哪些权限。在程序运行时,Shiro 会从配置文件或数据库中读取授权信息和角色信息,并根据这些信息进行授权判断。
除了配置文件和数据库,Shiro 还提供了编程式授权方式,即通过编写代码来实现授权。这种方式可以实现更加灵活的授权,但需要开发人员自己编写授权逻辑。
下面是 Shiro 的使用入门步骤:
- 引入 Shiro 依赖
在 Maven 项目中,可以通过在 pom.xml 文件中添加以下依赖来引入 Shiro:
org.apache.shiro shiro-core 1.7.1
- 配置 Shiro
在 Shiro 中,可以通过配置文件或编程方式来配置安全策略。下面是一个简单的 Shiro 配置文件示例:
[main]# 定义一个默认的 Realm,用于认证和授权myRealm = com.example.MyRealm# 定义一个默认的加密算法passwordService = org.apache.shiro.authc.credential.DefaultPasswordServicepasswordMatcher = org.apache.shiro.authc.credential.PasswordMatcherpasswordMatcher.passwordService = $passwordService# 配置安全管理器securityManager = org.apache.shiro.mgt.DefaultSecurityManagersecurityManager.realm = $myRealm# 配置加密器securityManager.passwordService = $passwordServicesecurityManager.authenticator.passwordMatcher = $passwordMatcher# 配置会话管理器sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManagersecurityManager.sessionManager = $sessionManager# 配置缓存管理器cacheManager = org.apache.shiro.cache.ehcache.EhCacheManagersecurityManager.cacheManager = $cacheManager[users]# 定义用户及其密码和角色admin = admin, admin_roleuser1 = password1, user_role1user2 = password2, user_role2[roles]# 定义角色及其权限admin_role = *user_role1 = user:read, user:writeuser_role2 = user:read
- 创建 Realm
在 Shiro 中,Realm 是用于认证和授权的核心组件。可以通过实现 org.apache.shiro.realm.Realm 接口来创建自定义的 Realm,或者使用 Shiro 提供的现成的 Realm 实现。下面是一个简单的自定义 Realm 示例:
public class MyRealm implements Realm { @Override public String getName() { return "myRealm"; } @Override public boolean supports(AuthenticationToken token) { return token instanceof UsernamePasswordToken; } @Override public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String username = (String) token.getPrincipal(); String password = new String((char[]) token.getCredentials()); if (!"admin".equals(username)) { throw new UnknownAccountException("Unknown user"); } if (!"password".equals(password)) { throw new IncorrectCredentialsException("Incorrect password"); } return new SimpleAuthenticationInfo(username, password, getName()); } @Override public AuthorizationInfo getAuthorizationInfo(PrincipalCollection principals) { SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); info.addRole("admin_role"); info.addStringPermission("user:read"); info.addStringPermission("user:write"); return info; }}
- 认证和授权
在应用程序中,可以通过调用 Shiro 提供的 Subject 类的方法来进行认证和授权。下面是一个简单的示例:
// 获取当前用户的 SubjectSubject currentUser = SecurityUtils.getSubject();// 创建一个用户名和密码的 TokenUsernamePasswordToken token = new UsernamePasswordToken("admin", "password");try { // 进行认证 currentUser.login(token); // 进行授权 if (currentUser.hasRole("admin_role")) { System.out.println("User has admin role"); } if (currentUser.isPermitted("user:read")) { System.out.println("User has read permission"); } if (currentUser.isPermitted("user:write")) { System.out.println("User has write permission"); }} catch (UnknownAccountException e) { System.out.println("Unknown user");} catch (IncorrectCredentialsException e) { System.out.println("Incorrect password");} catch (LockedAccountException e) { System.out.println("Account is locked");} catch (AuthenticationException e) { System.out.println("Authentication error");}
以上就是 Shiro 的入门使用步骤。当然,Shiro 还提供了很多其他的功能和配置选项,需要根据具体的应用场景进行选择和使用。
40岁老架构师尼恩提示:
和Shiro 类似,SpringSecurity 也是一个 资源访问授权的 框架。
原理都是类似的,大家精通一个,另一个也触类旁通了。
访问限流
访问限流是一种常见的保护机制,用于控制对某个资源的访问速率,以防止过多的请求导致系统负载过高或崩溃。
访问限流包括两个维度:
- 访问限流策略
- 访问限流算法
维度一:访问限流策略
- 面向接口限流
- 面向用户限流
维度二:访问限流算法
- 令牌桶算法
- 漏桶算法
在令牌桶算法中,系统会按照一定速率往令牌桶中添加令牌,每个令牌代表一个请求的访问权限。当请求到来时,系统会从令牌桶中取出一个令牌,如果令牌桶中没有令牌,则拒绝该请求。
在漏桶算法中,系统会按照一定速率从漏桶中释放请求,当请求到来时,如果漏桶中还有空余容量,则将该请求放入漏桶中,否则拒绝该请求。
接口被恶意狂,可以使用 基于 漏桶算法 + 基于用户限流的 综合性限流策略。
可以结合黑名单策略,对恶意用户进行有效人工管理。 如果用户被限流,甚至可以加入黑名单,封掉这个用户。
关于限流的详细内容,请查看尼恩的 深度笔记 :
限流深入解读:计数器、漏桶、令牌桶 三大算法的原理与实战(史上最全)
IP封禁
IP封禁是常见的网络安全措施,用于保护服务器免受恶意攻击。
IP封禁是指将某个IP地址列入黑名单,禁止其访问服务器。
在实际应用中,可以通过配置防火墙规则、使用反向代理服务器、使用专业的防火墙软件等方式来实现IP封禁和防刷。
也可以在应用层代码中,通过过滤器的方式,进行IP封禁
参考代码如下:
public class IpFilter extends OncePerRequestFilter { private static final Set IP_SET = new HashSet<>(); static { IP_SET.add("192.168.1.100"); IP_SET.add("127.0.0.1"); //添加其他需要封禁的IP } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String ipAddress = request.getRemoteAddr(); if(IP_SET.contains(ipAddress)){ response.setStatus(HttpStatus.FORBIDDEN.value()); return; } filterChain.doFilter(request, response); }}
在上述代码中,通过IpFilter过滤器来阻止特定的IP地址访问接口。其中,IP_SET为需要封禁的IP地址集合。
日志监控和异步分析
访问日志监控是一种常见的监控方式,用于监控网站、应用程序等的访问情况,可以帮助我们了解用户的行为和需求,以便做出相应的优化和改进。
常见的访问日志监控工具有 Apache 的 AccessLog、Nginx 的 AccessLog、ELK Stack 、Java 请求日志监控等。
这些工具、框架帮助我们收集、分析和可视化访问日志数据,从而更好地了解用户的需求和行为。
同时,我们也可以通过访问日志监控来检测和排查一些常见的安全问题,如 SQL 注入、XSS 攻击等。
监控访问日志可以帮助发现未经授权的访问请求。可以使用日志记录工具来记录每个请求的 IP 地址、时间戳和请求参数。
如果发现异常请求,可以及时采取措施,以防止攻击。
下面是一个参考的,进行响应记录的 过滤器。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; String requestURI = httpRequest.getRequestURI(); try { log.info("Request Received. URI: {}", requestURI); chain.doFilter(request, response); } catch(Exception e) { log.error("Exception occurred while processing request. URI: {}", requestURI, e); throw e; } finally { log.info("Request Completed. URI: {} Response Status: {}", requestURI, httpResponse.getStatus()); }}
在上述代码中,通过Filter过滤器来实现日志监控。
当请求进入时记录请求URI,当请求结束时记录响应状态码,如此可及时发现异常情况。
有了日志仅仅是第一步,还需要结合定时任务或者 流式计算工具,进行异步分析,甚至是离线分析。
异步分析或者离线分析的,最终得到恶意请求的用户或者ip,然后进行拉黑或者IP封禁。
升级硬件设备
如果服务器无法承受恶意攻击,可以通过升级硬件设备来增加服务器的承载能力。
例如,可以增加CPU或内存等硬件资源,降低服务器的响应时间。
基于时序的统计预警
当Java接口被恶意狂刷时,及时通知相关管理人员或安全团队是非常重要的。他们可以采取更加有效的措施,如封禁IP地址、加强认证机制等,从而保障接口的安全。
系统监控和预警通知是保持系统稳定和可靠性的重要手段。通常,我们需要对系统的各种指标进行监控和预警,如 CPU 使用率、内存使用率、磁盘空间、网络流量等等。当这些指标超过预设的阈值时,系统就会触发警报,并通知相关人员进行处理。
对于系统的 恶意狂刷,也可以基于 时序进行统计和预警。
为了实现系统监控和预警通知,可以使用一些开源的工具,如 Prometheus、Grafana、Alertmanager 等等。
其中,Prometheus 是一个广泛使用的监控系统,它支持多种数据源,如本地文件、HTTP、JMX、SNMP 等等。
Grafana 则是一个可视化监控工具,它可以将 Prometheus 收集的数据进行可视化展示。
Alertmanager 则是一个通知管理器,它可以根据不同的警报级别和通知方式,将警报发送给不同的人员或团队。
结合 Prometheus +Grafana +Alertmanager , 可以对 Java接口被恶意狂刷 进行时序统计,一旦超过一定的阈值,比如 1分钟被狂刷 10W次,进行预警, 方便开发和运维进行防范。
说在最后:有问题可以找老架构取经
接口被狂刷10Wqps,怎么破?其实是一个 架构问题。甚至是一个架构难题。
架构和高级开发不一样 , 架构的问题是open的、开发式的、没有标准答案的。高并发的架构之路,其实是充满了坎坷。 在做架构过程中,或者在转型过程中,如果遇到复杂的场景,确实不知道怎么做架构方案,确实找不到有底的方案,怎么办? 可以来找40岁老架构尼恩求助.
就在前几天,一个小伙伴遇到了一个 电商网站的黄金链路架构, 开始找不到思路,但是经过尼恩 10分钟语音指导,一下就豁然开朗。
so,大家如果遇到架构问题,甚至架构难题,可以找尼恩来交流,来求助。
技术自由的实现路径:
实现你的 架构自由:
《吃透8图1模板,人人可以做架构》
《10Wqps评论中台,如何架构?B站是这么做的!!!》
《阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了》
《峰值21WQps、亿级DAU,小游戏《羊了个羊》是怎么架构的?》
《100亿级订单怎么调度,来一个大厂的极品方案》
《2个大厂 100亿级 超大流量 红包 架构方案》
… 更多架构文章,正在添加中
实现你的 响应式 自由:
《响应式圣经:10W字,实现Spring响应式编程自由》
这是老版本 《Flux、Mono、Reactor 实战(史上最全)》
实现你的 spring cloud 自由:
《Spring cloud Alibaba 学习圣经》 PDF
《分库分表 Sharding-JDBC 底层原理、核心实战(史上最全)》
《一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)》
实现你的 linux 自由:
《Linux命令大全:2W多字,一次实现Linux自由》
实现你的 网络 自由:
《TCP协议详解 (史上最全)》
《网络三张表:ARP表, MAC表, 路由表,实现你的网络自由!!》
实现你的 分布式锁 自由:
《Redis分布式锁(图解 - 秒懂 - 史上最全)》
《Zookeeper 分布式锁 - 图解 - 秒懂》
实现你的 王者组件 自由:
《队列之王: Disruptor 原理、架构、源码 一文穿透》
《缓存之王:Caffeine 源码、架构、原理(史上最全,10W字 超级长文)》
《缓存之王:Caffeine 的使用(史上最全)》
《Java Agent 探针、字节码增强 ByteBuddy(史上最全)》
实现你的 面试题 自由:
4000页《尼恩Java面试宝典 》 40个专题
获取11个技术圣经PDF:
关键词:
天天热门:美团太狠:接口被恶刷10Wqps,怎么防?
环球微动态丨文心一言 VS 讯飞星火 VS chatgpt (33)-- 算法导论5.2 5题
环球快资讯丨微信dat文件转图片(jpg,png,gif)
敢情是什么意思?_敢情是什么意思方言那敢情好啊是什么意思
甲苯与氯气在光照下反应主要生成一氯代物_甲苯与氯气在光照下反应主要生成 最资讯
实时:硅料价格连续四周降幅超10%机构:判断供应链将进入负反馈阶段
精选!录制宏功能为7×50+5要怎么录制_录制宏是什么意思
诗经国风卫风木瓜_卫风木瓜
每日快播:刚赚钱就全国9.9元 瑞幸哪来的勇气?
家长网友建议高考期间高铁降速 官方回应:不行
焦点热文:14万元的比亚迪在海外乱杀 比国内贵十几万依然销量第一
侵犯特斯拉名誉权败诉后博主拒不道歉 陶琳无奈发文
再次对接天舟五号:中国空间站空前庞大!
焦点速讯:苹果查看电池充电次数快捷指令
美股异动丨Coinbase大跌20% 被SEC起诉违反美国证券法
Xiaomi 12 Pro影像_天天热消息
中庸之道的理论基础是_中庸之道的理论基础
环球要闻:给足诚意乘胜追击 比亚迪汉DM-i/DM-p双车试驾
江西一男子花9万元全款购车 等了两年多才发现是骗局
等量关系是什么时候学的_等量关系是什么
欧盟延长进口乌克兰农产品限制措施
NOKIA_6300怎么删除系统文件 比如主题
istp型人格占比(istp型人格)|全球新视野
速看:最佳婚姻解说_最佳婚姻
邓禄普轮胎怎么样代理_邓禄普轮胎怎么样 环球最资讯
经济法包括哪些法律规范_经济法包括哪些法律
斜着的藏头诗骂人_请大家帮我想一个爱情藏头诗 要斜着的
军中之军钢中之钢我们是祖国的热血儿郎_军中之军|今日热文
湖口二中校歌_湖口二中
环球实时:收入效应大于替代效应_替代效应小于收入效应
包裹正在等待揽收可以退款吗(包裹正在等待揽收)
给男朋友的备注英文短带翻译_给男朋友的备注名英文 世界微速讯
推荐几款轿车,优先考虑德系和自主
4月全球动力电池装机量约为49.5GWh 同比增长82.7% 全球微资讯
春节员工福利发什么好_春节员工福利发什么
焦点信息:福州生育报销多少
黄焖鸡米饭正宗做法历史?
全球快播:造影对身体有伤害吗_照影
速讯:惊险!工人作业时昏厥被困百米塔吊
【天天热闻】存款利率即将再降?银行
环球即时看!今日芒种,这些养生秘诀快收好
一文读懂苹果最硬开发者大会:首部头显设备面世 电脑全系苹果芯 当前短讯
全国首例!武汉专家“透视眼”下切除“蟹钳宝宝”多余手指
飞虎电视剧_关于飞虎电视剧的介绍-天天讯息
世界今亮点!奥比岛哪里可以赚金币 奥比岛哪最赚钱
大盘午后单边杀跌 创业板创调整新低
林婉儿_关于林婉儿概略
文旅融合不断创新 多元延伸产业链条-当前热议
工业园区人才市场现场招聘_园区人才市场现场招聘_报道
世界热讯:抢不到五月天门票的年轻人,都在哪里发疯?
焦点快看:海南椰岛:涉未及时缴税、原材料采购纠纷等,子公司部分银行账户被冻结
u308是什么元素_u308
北宫森林公园门票是多少_北宫森林公园门票
消费需求偏弱,山东鸡蛋价格震荡走低,小幅回落 热门看点
无限小说网_极限小说 焦点资讯
斯马克(SJM.US)Q4净销售额同比增10% EPS展望符合预期
造影对身体有伤害吗_照影 全球热议
华孚时尚:2022年公司自有棉田共产籽棉8万吨左右|每日观点
c++判断一个数是否为整数_本题要求实现一个判断整数是否为完全平方数的简单函数
物理化学地理可选专业率-物理化学地理可选专业
世界通讯!何氏眼科:尖端技术突破升级 守护国民全生命周期眼健康
大专上到一半退学费吗(大专上了半学期退学会退学费吗)_环球今日报
全球今日报丨这种虫子冲上热搜!千万别打,有人差点毁容、失明
天天短讯!哪些食物是发物癌症患者不能吃_哪些食物是发物
子集和真子集有啥区别_子集和真子集区别请说明白些
das auto_das
兰州城市供水集团多措并举保障“两考一赛”期间安全供水
男士化妆视频教程简单_男士化妆视频教程 滚动
当前热点-红领巾公园(关于红领巾公园的基本详情介绍)
亚洲电视宣布开启电商直播业务
着力推进习近平新时代中国特色社会主义思想学习教育制度化
玩命魔术迅雷下载_玩命魔术|环球今亮点
汉滨区大竹园镇马泥茶叶协会_关于汉滨区大竹园镇马泥茶叶协会简述
林如敏文娱评论集3:大家都有病_关于林如敏文娱评论集3:大家都有病概略
敏而好学不耻下问出自什么书名(敏而好学不耻下问出自)-今日热议
我国激光切割设备销量 2023激光加工设备产业市场占比 天天讯息
三证齐发!比亚迪云辇获权威认证:重新定义豪华汽车标准
《暗黑破坏神4》首个硬核模式满级玩家诞生!将可永久留名|每日资讯
汉滨区建民办事处红莲新希望幼儿园_关于汉滨区建民办事处红莲新希望幼儿园简述_新要闻
振江股份拟定增募资不超3亿元 2022年定增募资5.72亿-环球报资讯
【全球热闻】6月6日,深圳市委书记孟凡利与西门子全球执行副总裁、西门子中国董事长肖松一行会谈
陈礼燕现状_陈礼燕
防火门耐火极限是多少度高温下_防火门耐火极限是多少|当前速讯
Web安全-渗透测试-基础知识04_每日播报
MySQL存储引擎_新视野
ST万林:业绩说明会定于6月14日举行
公募REITs市场价格下行 无碍长期配置价值凸显
世界今日报丨北京建材市场哪里最好_北京建材市场
环球速讯:百色受贿罪如何判刑
搭载2.0T+采埃孚8AT,郑州日产全新帕拉丁官图发布
360创始人周鸿祎离婚 6.25%公司股份已转让胡欢:价值68亿_环球快资讯
世界微资讯!2023年第一个弄丢证件的考生出现了:结局暖心
环球速看:中国进攻性增强?外交部:真相是美国军机不远万里跑到中国家门口挑衅
实时焦点:君实生物跌5%创新低 2020年上市即巅峰两募资共86亿
Vue 生命周期
关于Cloud-云上的磁盘的创建与在操作系统OS中的使用
光水面钓鱼如何做支架_做支架的方法介绍
星巴克星享卡多少钱 星巴克星享卡_天天快消息
天天简讯:亚洲电视宣布开启电商直播业务
天天视点!绝味食品(603517.SH)拟每股派0.18元 于6月14日分红