前端安全13条、分类树,我从2s优化到0.1s | 每日掘金第233期

2,166 阅读5分钟

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 天内;可以推荐自己的文章、也可以推荐他人的文章。