Hello,欢迎来到每日掘金时间。每日掘金专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见!
本文字数 1800+,阅读时间大约需要 6 分钟。
- 【本期每日掘金】亮点:
- 产品经理:客户想要个画板,你们前端能不能做?
- 你是否了解 Java 中的 Lambda 表达式?以及它的变量捕获机制?
- Swift 最佳实践之 Error Handling
- ……
筛选规则:文章发布时间在本期「每日掘金」发布时间的 1-3 天内,且符合社区推荐标准,也会同步发布在掘金相关技术社群。
今日主理人
本期每日掘金由 丘山子 负责制作,需要投稿每日掘金请私信我的助理 小岳 。
PS:主理人目前正在招募中,有感兴趣的掘友们可以联系Captain
每日干货
主理人们会对近期(1-3 天)社区深度技术好文进行挖掘和筛选,优质的技术文章有机会出现在下方列表,排名不分先后。
『前端』
工作中一直有接触大量数据渲染的业务,使用react-window多之又多,所以对虚拟列表有了些浅显的理解。今天,我们就照着react-window的使用方式来实现三种虚拟列表。
- 元素固定高度的虚拟列表
- 元素不定高度的虚拟列表
- 元素动态高度的虚拟列表
最近面了一些前端,发现每次问到安全相关的问题,一些面试者只能说上来 XSS、CSRF、中间人攻击,就没了,于是写了这篇文章,总结了前端安全相关的点,给大家查缺补漏。
『后端』
最近看到一道有关 synchronized 关键字的面试题:不同 JDK 版本对 synchronized 有何优化?这道面试题的目的是为了考察 JDK 1.6后对锁的优化(增加了自适应自旋锁、锁消除、锁粗化、偏向锁、轻量级锁) 。通过这道面试题让我重新复习了一下锁升级的内容,接下来我想通过这篇文章主要讲述 synchronized 的锁升级知识,有兴趣的读者们可以继续往下阅读。
在 JDK 1.6 之前,使用 synchronized 关键字需要依赖于底层操作系统的 Mutex Lock 实现,挂起线程和恢复线程都需要转入内核态来完成,也就是说阻塞或唤醒一个 Java 线程都需要系统去切换 CPU 状态,这种状态的切换需要消耗处理器时间。这也就是为什么 synchronized 属于重量级锁的原因,因为需要切换 CPU 状态导致效率低下,时间成本相对较高,特别是当同步代码的内容过于简单时,可能切换的时间还要比代码执行的时间长。
在 JDK 1.6 之后,引入了偏向锁与轻量锁来减小获取和释放锁所带来的性能消耗,也就是不再是一上来就需要切换 CPU 状态导致效率低下而是通过锁升级的方式逐步增大性能消耗,从而避免了一些无需使用重量级锁的情况的性能消耗问题。
下面将详细讲解一下什么是 synchronized 的锁升级以及锁升级的整个流程。
分类树查询功能,在各个业务系统中可以说随处可见,特别是在电商系统中。但就是这样一个简单的分类树查询功能,我们却优化了
5次。到底是怎么回事呢?
『移动端』
在基础熟练的基础上,完全可以考虑基于Booster、ByteX等框架来开发,效率应该会高一些。
修改字节码的插件不止asm一个,还有javaassist等,可以多做一些尝试,按照需求选择适合自己项目的。
本次分享的目的旨在展示gradle插件开发的过程、思路、需要的基础、遇到问题后如何分析等,核心在于打好基础。
Google I/O '23 大会上发布了一系列的 AI 产品,而这些产品背后的基础 AI 引擎就是
PaLM2这个大语言模型了。
PaLM2相比于其他的大语言模型不同的一点是,大语言模型在手机端运行的可能。其中PaLM2中最小的Gecko(壁虎)模型可以直接运行在手机上。这对移动的开发者而言无疑是一个利好,同时对普通消费者而言也能更加方便快捷的使用到 AI 带来的各种能力。下面我们详细介绍下
PaLM2模型的一些情况。
Android 14 要来了,做好准备要开始适配 Android 14 了,这篇文章主要介绍在 Android 14 上一些功能和权限的变更,接下来我们一起来看一下这些行为的变更对我们的 App 产生哪些影响。
📖 投稿专区
大家可以在评论区推荐认为不错的文章,并附上链接和推荐理由,有机会登上下一期。文章创建日期必须在近 1-3 天内;可以推荐自己的文章、也可以推荐他人的文章。