协享科技
码龄6年
关注
提问 私信
  • 博客:206,422
    社区:52
    206,474
    总访问量
  • 157
    原创
  • 1,007,000
    排名
  • 28
    粉丝
  • 0
    铁粉

个人简介:拼命向上生长,是你年轻时唯一重要的事。

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:安徽省
  • 加入CSDN时间: 2019-02-23
博客简介:

smile_tianya的博客

查看详细资料
个人成就
  • 获得39次点赞
  • 内容获得14次评论
  • 获得150次收藏
  • 代码片获得696次分享
创作历程
  • 52篇
    2023年
  • 55篇
    2022年
  • 58篇
    2021年
成就勋章
TA的专栏
  • Docker
    39篇
  • Java
    55篇
  • GO
    2篇
  • 产品观
    4篇
  • 投资
    12篇
  • 跨学科通识课
    8篇
  • 运维
    26篇
兴趣领域 设置
  • Java
    spring
  • 编程语言
    pythonjavagolang
  • 前端
    javascriptvue.jsreact.jsnpm
  • 后端
    springnginxgolangspring boot架构分布式中间件gatewayspring cloud
  • 网络与通信
    httpudpsslhttpswebsocket网络协议tcp/iprpc
  • 学习和成长
    面试
  • 音视频
    语音识别音视频视频编解码实时音视频webrtc
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

什么是 fail-fast? 什么是fail-safe?

在了解了之后,不知道大家会不会有这样的疑问:他的add/remove等方法都已经加锁了,还要 copy 一份再修改干嘛?多此一举?同样是线程安全的集合,这玩意和Vector有啥区别呢?Copy-On-Write 简称 COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容 Copy 出去形成一个新的内容然后再改,这是一种延时懒惰策略。CopyOnWrite 容器即写时复制的容器。
原创
发布博客 2023.08.28 ·
339 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

遍历的同时修改一个 List 有几种方式?

【代码】遍历的同时修改一个 List 有几种方式?
原创
发布博客 2023.08.28 ·
977 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

char 能存储中文吗?

虽然 Unicode 字符集也在一直不断的迭代更新,但对于一些非常罕见的生僻字,它们可能因为版本问题,或者时间问题,暂时不在 Unicode 字符集中。在 Java 中,char 类型是用来表示一个 16 位的 Unicode 字符,它可以存储任何 Unicode 字符集中的字符,当然也包括中文字符。因为 Unicode 字符集包含了几乎所有的字符,包括常见字符、生僻字、罕见字以及其它语言的字符。但是,有人说,Java 中的 char 是没办法表示生僻字的,这么说其实有点绝对了。
原创
发布博客 2023.08.27 ·
401 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

你能说出几种集合的排序方式?

这里说的是两个语境的不同,Set 的无序,指的是插入顺序是无序的。并不是,Set 有一个实现类是 LinkedHashSet,它引入了 LinkedHashMap,通过双向链表记录了每个 node 的插入顺序和查询顺序(可选),以此来达到 Set 的插入有序性。Java.util 包中的 List 接口继承了 Collection 接口,用来存放对象集合,所以对这些对象进行排序的时候,要么让对象类自己实现同类对象的比较,要么借助比较器进行比较排序。如上述代码中对不具备排序能力的 Student 进行排序。
原创
发布博客 2023.08.27 ·
169 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

什么是 UUID,能保证唯一吗?

可以简单总结一下,Version 1 和 Version 2 这两个版本的 UUID,主要基于时间和 MAC 地址,所以比较适合应用于分布式计算环境下,具有高度唯一性。Version 3 和 Version 5 这两种 UUID 都是基于名称空间的,所以在一定范围内是唯一的,而且如果有需要生成重复 UUID 的场景的话,这两种是可以实现的。Version 4 这种是最简单的,只是基于随机数生成的,但是也是最不靠谱的。适合数据量不是特别大的场景下。
原创
发布博客 2023.08.26 ·
1624 阅读 ·
1 点赞 ·
0 评论 ·
2 收藏

Java 中的集合类有哪些?如何分类的?

从功能上讲,List 代表一个容器,可以是先进先出,也可以是先进后出。而 Set 相对于 List 来说,是无序的,同时也是一个去重的列表,既然会去重,就一定会通过 equals,compareTo,hashCode 等方法进行比较。后者代表的是是否可以迭代,如果可以迭代,会返回 Iterator 接口,即返回迭代方式。从实现上讲,List 可以有链表实现或者数组实现,两者各有优劣,链表增删快,数组查询快。其中,前四种数据结构都是单一元素的集合,而最后的 Map 则是以 KV 对的形式使用。
原创
发布博客 2023.08.26 ·
268 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

SimpleDateFormat 是线程安全的吗?使用时应该注意什么?面试回答

但是不同的方法获取到的时间的格式都不尽相同,这时候就需要一种格式化工具,把时间显示成我们需要的格式。由于不同的时区的时间是不一样的,甚至同一个国家的不同城市时间都可能不一样,所以,在 Java 中想要获取时间的时候,要重点关注一下时区问题。是 Java 提供的一个格式化和解析日期的工具类。默认情况下,如果不指明,在创建日期的时候,会使用当前计算机所在的时区作为默认时区,这也是为什么我们通过只要使用。来实现其实是有点类似于缓存的思路,每个线程都有一个独享的对象,避免了频繁创建对象,也避免了多线程的竞争。
原创
发布博客 2023.08.25 ·
367 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

JDK 新版本中都有哪些新特性?

可以看到,这里使用了很多 if-else,其实,Java 中给我们提供了一个多路比较的工具,那就是 switch,而且从 Java 14 开始支持 switch 表达式,但 switch 的功能一直都是非常有限的。虽然我们在代码中使用 var 进行了定义,但是对于虚拟机来说他是不认识这个 var 的,在 java 文件编译成 class 文件的过程中,会进行解糖,使用变量真正的类型来替代 var。在这之后,switch 中就多了一个关键字用于跳出 switch 块了,那就是 yield,他用于返回一个值。
原创
发布博客 2023.08.25 ·
211 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

什么是 AIO、BIO和NIO?

线程发起 IO 请求后,不需要阻塞,立即返回。AIO 方式适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用 OS 参与并发操作,编程比较复杂,JDK 7 开始支持。NIO 方式适用于连接数目多且链接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK 1.4 开始支持。线程发起 IO 请求后,一直阻塞,直到缓冲区数据就绪后,再进入下一步操作。,线程发起 IO 请求后,不需要阻塞,立即返回,也不需要定时轮询检查结果,异步 IO 操作之后会回调通知调用方。
原创
发布博客 2023.08.24 ·
175 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

什么是深拷贝和浅拷贝?

这种方式就能实现深拷贝,但是问题是如果我们在 User 中有很多个对象,那么 clone 方法就写的很长,而且如果后面有修改,在 User 中新增属性,这个地方也要修改。之后,在执行一下下面的测试代码,就可以发现,这时候 newUser 中的 address 对象就是一个新的对象了。因此,如果我们修改复制对象中的属性或者元素,原始对象中对应的属性或元素不会受到影响。因此,如果我们修改了复制对象中的属性或元素,原始对象中对应的属性或元素也会被修改。方法,这个方法其实在不重写的情况下,其实也是浅拷贝的。
原创
发布博客 2023.08.24 ·
172 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

以下关于异常处理的代码有哪些问题?

异常,千万不能捕获了之后什么也不做。javac 使用了语法糖进行优化。
原创
发布博客 2023.08.23 ·
71 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

ava 中的枚举有什么特点和好处?

枚举类型是指由一组固定的常量组成合法的类型。Java 中由关键字 enum 来定义一个枚举类型。枚举的 equals 方法底层用的还是 ==,所以两者都可以。通过反编译后代码我们可以看到,
原创
发布博客 2023.08.23 ·
135 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java中异常分哪两类,有什么区别?

ThrowableException和Error,二者都是 Java 异常处理的重要子类,各自包含大量子类。自定义异常就是开发人员自己定义的异常,一般通过继承 Exception 的子类的方式实现。编写自定义异常实际上是继承一个 API 标准异常类,用新定义的异常处理信息覆盖原有信息的过程。这种用法在 Web 开发中也比较常见,一般可以用来自定义业务异常。如余额不足、重复提交等。这种自定义异常有业务含义,更容易让上层理解和处理。
原创
发布博客 2023.08.22 ·
698 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

你知道fastjson的反序列化漏洞吗?

因为 fastjson 自己定义了序列化工具类,并且使用 asm 技术避免反射、使用缓存、并且做了很多算法优化等方式,大大提升了序列化及反序列化的效率。
原创
发布博客 2023.08.22 ·
227 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

serialVersionUID 有何用途?如果没定义会有什么问题?

这样,当再次需要这个对象的时候,从文件中读取出二进制流,再从二进制流中反序列化出对象。在序列化之后,由于某些原因,我们对该类做了变更,重新启动应用后,我们相对之前序列化过的对象进行反序列化的话就会报错。进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是。序列化是将对象的状态信息转换为可存储或传输的形式的过程。但是,如果发生了变化,那么这个文件对应的。在进行反序列化时,JVM 会把传来的字节流中的。作序列化版本比较用,这种情况下,如果。的堆内存中的,也就是说,如果。
原创
发布博客 2023.08.22 ·
300 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java 序列化的原理是什么?

不支持无默认构造函数的类,反序列化时需用户自己初始化序列化后的对象,其只负责将该对象进行赋值;几乎所有的商用编程语言都有序列化的能力,不管是数据存储到硬盘,还是通过网络的微服务传输,都需要序列化能力。同时,也可以通过反序列化机制将磁盘中的字节码再转换成内存中的类。如果要序列化的类有父类,要想同时将在父类中定义过的变量持久化下来,那么父类也应该集成。如果没有在这两个方法中定义序列化实现细节,那么序列化之后,对象内容为空。的序列化机制,将类序列化为符合编码的数据流,然后通过。Kryo:速度快,序列化后体积小;
原创
发布博客 2023.08.22 ·
151 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java 的动态代理如何实现?

一旦需要代理的类中方法比较多,或者需要同时代理多个对象的时候,这无疑会增加很大的复杂度。的动态代理有一个限制,就是使用动态代理的对象必须实现一个或多个接口。Java 的动态代理,在日常开发中可能并不经常使用,但是并不代表他不重要。动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。最大的区别就是静态代理是编译期确定的,但是动态代理却是运行期确定的。,是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,是通过继承的方式做的动态代理,因此如果某个类被标记为。
原创
发布博客 2023.08.21 ·
145 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java 注解的作用是什么?

说简单点,就是定义其他注解的注解。比如Override这个注解,就不是一个元注解。而是通过元注解定义出来的。这里面的@Target@Retention就是元注解。@Target(表示该注解可以用于什么地方),@Retention(表示在什么级别保存该注解信息)、(将此注解包含在 javadoc 中)、@Inherited(允许子类继承父类中的注解)。
原创
发布博客 2023.08.21 ·
128 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

什么是反射机制?为什么反射慢?

Java.lang.Class 是一个比较特殊的类,它用于封装被装入到 JVM 中的类(包括类和接口)的信息。当一个类或接口被装入的 JVM 时便会产生一个与之关联的 java.lang.Class 对象,可以通过这个 Class 对象对被装入类的详细信息进行访问。在有些场景下,要知道可以使用反射解决部分问题。Java 的 Class 类是 java 反射机制的基础,通过 Class 类我们可以获得关于一个类的相关信息。在 java 中,只要给定类的名字,那么就可以通过反射机制来获得类的所有属性和方法。
原创
发布博客 2023.08.20 ·
202 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Java 中创建对象有哪些方式?

这是我们最常用的、也是最简单的创建对象的方式,通过这种方式我们还可以调用任意的构造函数(无参的和有参的)。类是 Java 的内部 API,它并不属于 Java 标准库的一部分,也不建议直接在生产环境使用。类来进行直接的内存操作,包括内存分配和对象实例化。然而,需要注意的是,会给我们创建一个单独的对象。就会创建一个新的对象,将前面对象的内容全部拷贝进去。通过使用方法句柄,可以间接地调用构造函数来创建对象。方法获取构造函数的方法句柄,然后通过。方法调用有参数的和私有的构造函数。方法调用无参的构造函数创建对象。
原创
发布博客 2023.08.20 ·
173 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多