首页 文章 精选 留言 我的

精选列表

搜索[java],共10000篇文章
优秀的个人博客,低调大师

四面快手归来,分享Java真题及面经:策略模式+红黑树+Java锁+Redis+Kafka等分布式

看真题,了解差距,明确学习方向与目标。 看面经,提前准备,事半功倍。 一面(一个小时十分钟) 1.自我介绍 2.说说B+树和B树的区别,优缺点等? 3聊聊Spring,主要IOC等等 4多线程JUC包下的一些常见的类,比如CountDownLatch、Semaphore等 5.锁的概念,锁相关的关键字,volatile,synchronized。还比较了ReentrantLock与synchronized。 6.你了解哪些收集器?CMS和G1。详细谈谈G1的优点?什么时候进行Full GC呢? 7.Spring中涉及的一些设计模式 8.算法题:无序数列中求第k大的数(维护最小堆,然后依次遍历,与堆顶比较) 9.MySQL创建索引的原则,好处 怎么实现一个线程安全的计数器? 二面(四十多分钟) 设计模式:讲了单例,工厂方法,抽象工厂,策略模式,观察者模式,代理模式,还顺便讲了下spring动态代理的实现原理 线程池有哪些参数?分别有什么用?如果任务数超过的核心线程数,会发生什么?阻塞队列大小是多少? HashMap的底层数据结构 红黑树的具体结构及实现,红黑树与查找树的区别体现 接着聊ConcurrentHashMap,底层实现 HashMap哈希函数的认识,JDK1.8采用的hash函数 数据库索引,索引底层的实现,B+树的结构以及与普通查找树的优点 TCP三次握手四次挥手,四次挥手过程中服务端的哪几种状态,哪几种包 已经有一个查询好友的接口,设计一个微信朋友圈,可以实现发表朋友圈,添加评论,查看评论等功能。主要是设计数据结构 三面(50分钟:主要分布式这块) 你对快手的了解,和抖音的区别,聊项目项目中用到dubbo?那你说说什么是rpc框架?和http调用的区别是什么?Redis有哪些数据结构?持久化方案和区别?Redis哨兵、集群的设计原理和区别?Redis缓存和数据库会存在一致性问题吗?怎么解决Kafka怎么保证数据可靠性?讲了生产者端发送消息到broker持久化,分区和副本机制,消费者消费消息的at-least-once和at-most-once?怎么实现Exactly-Once? HR面: 常规的面试流程了,主要就是自己优缺点,以及未来的职业发展,以及薪资这块。 以上就是快手技术三面和HR面试题目,除此之外,以下阿里面试题目(送答案):1、阿里集团中间件4面:J.U.C并发框架+RocketMQ +MyCat+锁机制+架构2、阿里内推技术3面更多BAT技术架构+面试真经等干货,关注【mikechen优知】,回复【阿里】,立即拿走。 **通过了解大厂的技术面试题目与面试经验,查漏补缺,平时在工作中多学习、多实践,有目标去扩充自己的技术栈,深度掌握1-2门技术基础上去延伸广度,距离目标就不会太远了。关于快手面试题目,大家有什么想要探讨的内容,欢迎留言~**

优秀的个人博客,低调大师

feilong 4.5.4 发布了,让 Java 开发更简便的工具库

feilong 4.5.4 Release Notes(Milestone #53) 里程碑:4.5.4 · Milestone #53(18 items, 100% completed) 仓库:https://github.com/ifeilong/feilong Milestone 视图:https://github.com/ifeilong/feilong/milestone/53?closed=1 升级提示(先看这个) MapUtil.get(Map<K,V>, int) 由于 int 重载容易产生歧义(是按 key 还是按“第几个 entry”的语义),已被标记为 @Deprecated。 后续请改用新增的明确索引访问方法:MapUtil.getByIndex(Map<K,V>, int)。 若干历史 API 仍在渐进迁移到更现代的写法;如果你项目里有用到 org.apache.commons.collections4.Predicate/Closure/Transformer 相关桥接或内部回调,建议做一次 clean rebuild(一般无需改业务代码)。 ✨ 新特性 / 增强(New Features & Enhancements) 1️⃣ 定时任务:ScheduledExecutorServiceUtil.startSingleThreadScheduledAtFixedRate (#836) 背景:在执行耗时较长的任务(如批处理、数据同步、持续1小时以上的计算)时,开发者常常需要在等待期间了解任务是否仍在正常运行,避免“假死”情况。通过定时心跳或进度播报,可以及时感知任务状态。本方法提供了一个轻量级的单线程定时调度工具,方便快速实现此类需求。 返回值说明:方法返回 ScheduledExecutorService 实例,使用完毕后需自行调用 shutdown() 或 shutdownNow() 释放资源,避免线程泄漏。 示例: // 启动一个定时任务:初始延迟1秒,之后每5秒执行一次,打印心跳ScheduledExecutorService scheduler = ScheduledExecutorServiceUtil .startSingleThreadScheduledAtFixedRate(1, 5, TimeUnit.SECONDS, () -> { System.out.println("Heartbeat: " + System.currentTimeMillis()); }); // ... 执行业务逻辑 ... // 任务结束后,关闭调度器释放线程scheduler.shutdown(); 2️⃣ 分组增强:GroupUtil.groupByToSet(…) (#835, #845) 背景:以前只能用 groupBy 收集到 List,现在可以直接收集到 Set(自动去重),并且支持过滤。 示例 1:按城市分组,只保留活跃用户,每组结果放入 Set。 List<User> users = Arrays.asList( new User(1, "Alice", "Beijing", true), new User(2, "Bob", "Shanghai", false), new User(3, "Charlie", "Beijing", true) ); Map<String, Set<User>> cityActiveUsers = GroupUtil.groupByToSet(users, User::getCity, User::isActive); // 结果:{Beijing=[User{id=1}, User{id=3}], Shanghai=[]} 示例 2:更强的重载 – 按城市分组,组内按 userId 去重,且只包含活跃用户。 Map<String, Set<User>> result = GroupUtil.groupByToSet( users, User::getCity, // 分组依据 User::getId, // 组内去重依据(相同id只保留一个) User::isActive // 过滤条件 ); 3️⃣ 明确的 Map 按序号访问:MapUtil.getByIndex(…) (#834, #837) 背景:MapUtil.get(map, 0) 曾经既可以解释为“获取 key=0 的值”,也可以解释为“获取第 0 个 entry 的值”。现在拆分为两个方法,消除歧义。旧方法 MapUtil.get(Map<K,V>, int) 已标记为 @Deprecated。 示例: Map<String, Integer> scores = new LinkedHashMap<>(); // 保证顺序scores.put("Math", 95); scores.put("English", 88); scores.put("Physics", 92); // ❌ 旧方法(已废弃):// Integer mathScore = MapUtil.get(scores, 0); // 歧义 // ✅ 新方法:明确表示获取第 0 个 entry 的 valueInteger firstScore = MapUtil.getByIndex(scores, 0); // 返回 95 4️⃣ 拒绝/排除选择器:CollectionsUtil.selectRejected 支持 Function 写法 (#838, #839) 背景:之前只能通过属性名字符串排除,现在可以用 Lambda 表达式,类型安全且支持 IDE 自动补全。 示例:排除状态为 DISABLED 或 DELETED 的用户。 List<User> allUsers = ...; // 使用 Function 提取 status 属性List<User> activeUsers = CollectionsUtil.selectRejected( allUsers, User::getStatus, Status.DISABLED, Status.DELETED ); 另一个重载接受 Collection<V>,适合动态构造排除值列表: List<Status> excludedStatuses = Arrays.asList(Status.DISABLED, Status.DELETED); List<User> activeUsers2 = CollectionsUtil.selectRejected( allUsers, User::getStatus, excludedStatuses ); 5️⃣ 轻量级重试:SimpleRetryUtil (#846) 背景:很多场景需要“失败后重试几次”,之前没有统一的工具类,现在新增 com.feilong.context.SimpleRetryUtil。 ⚠️ 轻量级定位:本工具类仅提供最基本的重试能力(固定间隔、固定次数),适合简单场景。如果你的场景需要更复杂的策略(如指数退避、根据异常类型选择性重试、持久化重试状态等),建议使用 Spring Retry 或 Failsafe 等专业重试库。 示例:最多重试 3 次,每次间隔 500ms,执行一个可能失败的任务。 boolean success = SimpleRetryUtil.retry(3, 500, () -> { boolean ok = callRemoteApi(); if (!ok) throw new RuntimeException("API call failed"); return true; }); if (success) { System.out.println("远程调用成功"); } 6️⃣ 钉钉消息 at 指定人:UserNameAndMobileEntity (#833) 背景:钉钉机器人发送消息时需要指定被 @ 的人,通常需要姓名和手机号。现在有了专门的实体类。 示例: UserNameAndMobileEntity user = new UserNameAndMobileEntity("张三", "13800138000"); // 后续可传给钉钉消息构建器 7️⃣ Markdown 辅助工具增强:appendMarkdownLine (#850, #851) 背景:在拼接机器人消息或日志时,频繁需要追加一行 Markdown 文本,现在有了专用方法。 示例:使用 appendMarkdownLine(StringBuilder, CharSequence) 追加普通行。 StringBuilder sb = new StringBuilder(); MarkdownHelper.appendMarkdownLine(sb, "# 用户报告"); MarkdownHelper.appendMarkdownLine(sb, "| 姓名 | 分数 |"); MarkdownHelper.appendMarkdownLine(sb, "|---|---|"); MarkdownHelper.appendMarkdownLine(sb, "| Alice | 95 |"); System.out.println(sb.toString()); 重载 appendMarkdownLine(StringBuilder, CharSequence, int):第三个参数表示追加的换行符数量,而非缩进。 // 追加一行后额外增加 2 个换行符(空两行)MarkdownHelper.appendMarkdownLine(sb, "---", 2); ♻️ 代码优化 / 底层对齐(Improvements & Cleanup) commons-collections4 相关桥接代码跟进 4.5.0 风格(#842/#843/#844): 对仍在使用/桥接到 Predicate<T>、Closure<T>、Transformer<T,R> 的路径做了同步调整与清理。 部分方法入参中对 Predicate 的使用改为更明确的全限定名写法(#848),避免命名冲突。 ObjectUtil.defaultEmptyListIfNull(List<T>) 改为更直白的三元实现(#840)——行为不变,可读性/静态分析更友好。 Javadoc:完善 GroupUtil 类级文档(#849)。 * 测试 单测中逐步把 org.junit.Assert.assertThat 迁移到 org.hamcrest.MatcherAssert.assertThat(#847),减少对 JUnit 内建 assertThat 的依赖。

优秀的个人博客,低调大师

Java 快速开发框架 zebra-springboot v1.2.3 版本发布

开工发布版 zebra 是基于 SpringBoot 封装的增强框架,基于 “约定优于配置” 的理念,再次精简常规配置, 内置丰富的 starter,并优化 Springboot 环境配置和完善的规约限制。 其目的是提供一个更为完整的一站式解决方案,帮助开发人员更加快速的集成常用第三方库或工具到 Spring Boot Web 应用程序中,建立统一基础技术规范,建立可积累,可复用的组件库,促进开发人员复用,提升研发质量和效率。 框架地址为:http://zebra.zhanghongbin.xyz 最新版本为v1.2.3 更新内容如下: 1. 优化排除白名单地址 2. satoken starter swagger 优化token认证 3. 修复reids 采用jackson反序列化问题

优秀的个人博客,低调大师

Java 快速开发框架 zebra-springboot v1.2.2 版本发布

zebra 是基于 SpringBoot 封装的增强框架,基于 “约定优于配置” 的理念,再次精简常规配置, 内置丰富的 starter,并优化 Springboot 环境配置和完善的规约限制。 其目的是提供一个更为完整的一站式解决方案,帮助开发人员更加快速的集成常用第三方库或工具到 Spring Boot Web 应用程序中,建立统一基础技术规范,建立可积累,可复用的组件库,促进开发人员复用,提升研发质量和效率。 框架地址为:http://zebra.zhanghongbin.xyz 最新版本为v1.2.2 更新内容如下: 1. 增加zebra-spring-boot-starter-rabbitmq 模块 2. sql日志增加执行时间 3. 优化数据权限代码 4. 修复使用DynamicMapperPlusHandler时Mapper泛型为Object问题 5. 增加忽略查询注解IgnoreQuery

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册