
JAVA基础篇
saber@p
星辰滚烫不如麻辣烫
展开
-
一次实习开发中写出代码死循环的教训
今天在开发中 编写一个接口 需要涉及到数据迁移,由于是大表 在一开始就考虑了很多东西,多线程,数据一致性,性能优化等等,反而在do while的代码中忽略了最重要的东西,要保证代码不会出现死循环,不能影响线上业务,后面在单元自测中发现cpu上升到99,debug定位到代码存在死循环死循环的原因是 由于代码出现异常 跳过了中止条件的累加 使得中止条件一直不成立所以在编写循环的代码时候,一定要确保 中止条件能被执行 try { }catch (Ex原创 2021-07-11 22:18:21 · 335 阅读 · 0 评论 -
纠正对容器的认知
Java中的并发容器ListSetMapQueue这些容器对应线程不安全的有 ArrayList 、LinkedSet、HashMap、PriorityQueue 等等这些可以采用Collections.synchronized 方法包装成对应线程安全的,或者是直接使用Java提供对应的线程安全的包List list = Collections. synchronizedList(new ArrayList());Set set = Collections. synchroniz原创 2021-07-11 22:09:15 · 133 阅读 · 0 评论 -
关于堆的复习
堆的本质堆的本质是一种优先队列,理解起来可以一种二叉树堆的逻辑实现我们往一个队列的尾部去添加元素,然后与他的上一层元素进行比较,判断要进行上浮 还是下沉手写堆实现手写堆 这里贴很久之前我跟着黑马视频写过的代码/** * 堆的实现(由完全二叉树加一个数组实现) * 父节点大于两个子结点 */public class Heap< T extends Comparable< T > > { /** * 定义一个数组 存放堆中的数据 */原创 2021-07-10 17:03:04 · 121 阅读 · 0 评论 -
CountDownLatch 和 CyclicBarrier 实现线程之间的同步
两者的区别CountDownLatch 主要用来解决一个线程等待多个线程的场景CyclicBarrier 是一组线程之间互相等待CountDownLatch构造方法使用demo public static void main(String[] args) throws InterruptedException { //创建一个 countDownLatch CountDownLatch countDownLatch = new CountDownL原创 2021-06-24 15:32:22 · 150 阅读 · 0 评论 -
使用Semaphore实现一个限流器
import java.util.concurrent.Semaphore;/** * @Description 使用Semphare 构建一个限流器 */public class Restrictor { private Semaphore semaphore; /** * 初始化限制并发流量的大小 * @param size */ public Restrictor(int size) { semaphore = new原创 2021-06-24 14:24:18 · 123 阅读 · 0 评论 -
http中的状态码
最近笔试经常遇到询问http状态码的问题,想着总结一下,毕竟送分题 不要白不要嘻嘻原创 2021-04-14 15:37:34 · 141 阅读 · 0 评论 -
正则表达式入门
学习正则表达式,需要借助工具来测试自己写的对不对 查看效果,可以用https://regex101.com/ 网站在线测试限定符? :代表前面的字符需要出现0 次 或者 1次,即可有可无例如used?代表的是d 出现0次或者1次*:代表前面的字符可以出现的次数不限制,可以是0次和多次ab*c+: 代表前面的字符出现 1次以上ab+c{} :可以指定前面的字符出现的次数//字符b需要出现6次ab{6}c//字符b出现在2到6 次的范围内 ab{2,6}原创 2021-02-26 16:56:47 · 152 阅读 · 0 评论 -
IO流
定义 : Java 中把不同的 输入/ 输出源 ,抽象的表示成流(steam好处 : 因为Java 中提供IO流的抽象,所以开发者 可以采用一致的IO代码 读写各种各样的IO流节点分类1、按照流向 可以分为 输入流 、输出流输入流 : 只能从中读取数据,不能往里面写入数据输出流 : 只能从中写入数据,不能往里面读取数据2、按照操作的数据单元不同,可以分为 字节流、字符流字节流 : 操作的数据单元是 8位的字节,以InputSteam和OutputSteam 作为基类字符.原创 2021-02-21 16:08:08 · 115 阅读 · 0 评论 -
反射机制Reflection
1、静态语言和动态语言静态语言 : 运行时结构不可变动态语言 : 运行时,代码可以根据某些条件改变自己结构Java 依赖反射机制,可以看成是一门“准动态语言”2、Java Reflection反射机制运行程序在执行期间 借助Reflection API 去读取到类的内部信息,并且直接操作内部属性和方法Class c= Class.forName("java.lang.String");加载完类后,会产生一个Class 对象(一个类只有一个Class对象),我们通过这个Class对象查原创 2021-01-16 23:52:26 · 135 阅读 · 0 评论 -
注解Annotation
1、什么是注解注解是从JDK5.0 开始引入的技术可以看成是Java类,方法的一个扩展模板可以附加在package , class , method , field 等上面 , 相当于给他们添加了额外的辅助信息2、自定义注解使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation 接口import java.lang.annotation.*;//定义一个注解@Target(value = {ElementType.METHOD原创 2021-01-16 22:10:32 · 98 阅读 · 0 评论 -
Java8新特性--接口改动
接口中的默认方法Java 8中允许接口中包含具有具体实现的方法,该方法称为“默认方法”,默认方法使用 default 关键字修饰。public interface MyFun { default String getName(){ return "哈哈哈"; }}注意:接口默认方法的”类优先”原则1.继承一个类和实现一个接口,同名方法, 忽略接口的public interface MyFun { default String getName(){ return "哈原创 2020-11-29 11:23:51 · 287 阅读 · 0 评论 -
Stream API中的并行流
什么是并行流并行流就是把一个内容分成多个数据块,并用不同的线程分别处理每个数据块的流。Java 8 中将并行进行了优化,我们可以很容易的对数据进行并行操作。Stream API 可以声明性地通过 parallel() 与sequential() 在并行流与顺序流之间进行切换。在大数据操作中 肯定是并行流操作很快,能够最大限度的利用cpu资源Fork/Join 框架Fork/Join 框架:就是在必要的情况下,将一个大任务,进行拆分(fork)成若干个小任务(拆到不可再拆时),再将一个个的小任务运算原创 2020-11-29 10:59:59 · 385 阅读 · 1 评论 -
Stream API
什么是 Stream一、流(Stream) 到底是什么呢?是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。“集合讲的是数据,流讲的是计算!”二、 注意①Stream 自己不会存储元素。②Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。③Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。Stream 的操作三个步骤一、创建 Stream1.Collection 提供了两个方法 stream() 与 parallelStream(原创 2020-11-29 10:36:31 · 131 阅读 · 0 评论 -
Java8新特性--Lambda表达式
为什么要使用Lambda表达式?Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)简化开发 ,提高代码可读性,适应设计模式。比如 当我们创建一个匿名内部类时new Comparator<String>(){ @Override public int compare(String o1, String o2) { return Integer.compare(o1.length(), o2.length原创 2020-11-29 09:31:03 · 145 阅读 · 0 评论 -
Java多态
多态的产生Java引用的变量有两种类型:一种是编译时类型,一种是运行时类型编译时类型由声明该变量的时使用的类型决定 ,运行时类型由实际赋给该变量的对象决定,如果编译时类型和运行时类型不一样,就可能出现多态。在java的多态调用中,new的是哪一个类就是调用的哪个类的方法?不是。1.成员变量:编译和运行都参考左边。2.成员函数(非静态):编译看左边,运行看右边3.静态函数:编译和运行都看左边。package 多态;public class test { public stat原创 2020-11-25 09:23:00 · 225 阅读 · 0 评论 -
多线程之深入浅出
为什么要使用多线程网站的访问量非常的巨大,常常会出现多个用户端访问客户端的情况,多线程可以使我们更好去应对这种高并发的情况,最大可能去充分利用cpu,加快访问速度,提升用户使用的舒适度分清进程和线程进程:1. 进程是程序的一次动态执行过程, 占用特定的地址空间。2. 每个进程由3部分组成:cpu、data、code。每个进程都是独立的,保有自己的cpu时间,代码和数据,即便用同一份程序产生好几个进程,它们之间还是拥有自己的这3样东西,这样的缺点是:浪费内存,cpu的负担较重。3. 多任务(Mul原创 2020-09-28 22:21:24 · 298 阅读 · 0 评论 -
容器的方法调用和底层原理
Collection接口 1.什么是Collection ? Collection 表示一组对象,它是集中、收集的意思。Collection接口的两个子接口是List、Set接口。List和Set是Collection 的子接口List特点和常用方法(List接口常用的实现类有3个:ArrayList、LinkedList和Vector) List是一个**有序,可重复**的容器 有序:List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元原创 2020-09-26 16:38:39 · 328 阅读 · 0 评论 -
Java异常机制
JAVA基础篇加粗样式欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式原创 2020-09-23 23:39:34 · 142 阅读 · 0 评论