每日十题八股-2025年2月24日-补充材料

1.synchronized和Lock的区别是什么?

来自Java- 技术专题 -Synchronized 和 lock 区别
1.lock 是一个接口,而 synchronized 是 Java 的一个关键字,synchronized 是内置的语言实现。
2. 异常是否释放锁:synchronized 在发生异常时候会自动释放占有的锁,因此不会出现死锁;而 lock 发生异常时候,不会主动释放占有的锁,必须手动 unlock 来释放锁,可能引起死锁的发生。(所以最好将同步代码块用 try catch 包起来,finally 中写入 unlock,避免死锁的发生。)
3.是否响应中断:lock 等待锁过程中可以用 interrupt 来中断等待,而 synchronized 只能等待锁的释放,不能响应中断。
4. 是否知道获取锁:Lock 可以通过 trylock 来知道有没有获取锁,而 synchronized 不能。
5. Lock 可以提高多个线程进行读操作的效率。(可以通过 ReadWriteLock 实现读写分离)
6.在性能上来说,如果竞争资源不激烈,两者的性能是差不多的,而当竞争资源非常激烈时(即有大量线程同时竞争),此时 Lock 的性能要远远优于 synchronized。所以说,在具体使用时要根据适当情况选择。
7.synchronized 使用 Object 对象本身的 wait 、notify、notifyAll 调度机制,而 Lock 可以使用 Condition 进行线程之间的调度。

2.JDK8新特性

Java 8是Java语言的一次重要更新,它引入了许多新特性,使得编写代码更加简洁、易于维护且功能更强大。以下是Java 8的主要新特性:

  1. Lambda表达式:
    Lambda表达式是Java 8最重要的特性之一,它提供了一种简洁的方式来表示匿名函数。
    语法:(parameters) -> expression 或者 (parameters) -> { statements; }。
    Lambda表达式通常与函数式接口一起使用,使得代码更加简洁和易读。
  2. 函数式接口:
    函数式接口是只有一个抽象方法的接口。
    Java 8中引入了@FunctionalInterface注解来显式声明函数式接口。
    这使得Lambda表达式可以方便地实现这些接口。
  3. 方法引用:
    方法引用是Lambda表达式的一种简写形式,可以直接引用现有的方法。
    语法:ClassName::methodName。
    方法引用使得代码更加简洁,并提高了可读性。
  4. Stream API:
    Stream API提供了一种功能强大的操作集合数据的新方式。
    它支持顺序流和并行流,可以轻松实现过滤、排序、映射和减少等操作。
    Stream API使得集合操作更加高效和易于理解。
  5. 接口运行定义默认方法和静态方法:
    Java 8允许在接口中定义默认方法静态方法,即带有实现的接口方法。
    这使得接口的演化更加灵活,而无需破坏现有的实现。
  6. Optional类:
    Optional类是Java 8中引入的一个非常有用的工具,用于处理可能为null的值。
    它的主要目的是减少空指针异常(NullPointerException),使得代码更加健壮和可读。
    Optional类提供了多种方法来处理可能为null的值,如isPresent()、isEmpty()、get()、orElse()等。
  7. 新的日期和时间API:
    Java 8引入了新的日期和时间API,包括LocalDate、LocalTime、LocalDateTime、Instant、Duration以及Period等类。
    新的API比之前的Date类更加丰富和功能齐全,解决了之前Date类转化时的线程安全问题。
  8. 重复注解与类型注解:
    Java 8支持重复注解,即允许在同一个元素上多次使用相同的注解。
    同时,Java 8也引入了类型注解,允许在类型上使用注解,如方法返回类型、字段类型等。
  9. JVM改进:
    Java 8对JVM进行了一些改进,如移除了永久代(PermGen),加入了元数据区(Metaspace)等。
    这些改进有助于提升Java应用的性能和稳定性。
### uni-app 常见面试题及解答 #### 什么是 uni-app? uni-app 是一个基于 Vue.js 的跨平台开发框架,允许开发者编写一次代码并将其部署到多个平台上,包括微信小程序、H5、App 和其他主流的小程序生态。它通过抽象不同平台的 API 差异,提供了一套统一的语法和接口[^1]。 #### uni-app 支持哪些平台? uni-app 支持多种平台,主要包括但不限于以下几种: - 微信小程序 - 支付宝小程序 - 百度小程序 - 字节跳动小程序 - H5 页面 - Android 应用 - iOS 应用 这些平台的支持使得 uni-app 成为了一个多端适配的强大工具[^2]。 #### 如何实现页面跳转? 在 uni-app 中,可以使用 `uni.navigateTo` 或者 `uni.redirectTo` 方法来进行页面跳传。两者的区别在于前者会保留当前页面栈,而后者则会关闭当前页面再跳转至目标页面。以下是具体的代码示例: ```javascript // 跳转到新页面并保留当前页面 uni.navigateTo({ url: '/pages/targetPage/targetPage' }); // 关闭当前页面并跳转到指定页面 uni.redirectTo({ url: '/pages/targetPage/targetPage' }); ``` 上述方法适用于小程序环境下的页面切换操作[^3]。 #### uni-app 中如何处理数据绑定? 类似于 Vue.js,uni-app 使用双大括号语法进行模板中的数据绑定。例如,在组件中可以通过如下方式展示动态变量的内容: ```html <view>{{ message }}</view> ``` 其中 `message` 变量定义于脚本部分的数据对象内。此外还支持 v-model 实现双向绑定功能,方便表单输入控件与模型之间的同步更新[^4]。 #### 性能优化有哪些技巧? 对于性能优化方面可以从以下几个角度入手: 1. **减少不必要的 DOM 操作**:尽量利用虚拟 DOM 提升渲染效率; 2. **按需加载资源文件**:避免一次性引入过多静态素材增加首屏耗时; 3. **合理设置缓存策略**:针对图片或其他外部链接采用本地存储机制降低服务器压力; 4. **压缩传输包大小**:移除无用依赖项并通过打包工具精简最终产物体积[^5]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值