![](https://img-blog.csdnimg.cn/20190927151026427.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA基础
关于java基础的总结
量子玫瑰
美妙的一生在于你能迷上什么东西。
展开
-
来简单认识下简单的布隆过滤器
布隆过滤器1. 简介布隆过滤器是一种数据结构 主要由 一个 bit数组和一组hash函数组成1.1优点占用空间小,效率高1.2缺点对于判断存在 是一个概率事件 而不是确定事件2.作用用来告诉我们 某个量 在一个量很大的数据集合中 一定不存在 或者 大概率存在3.原理对于布隆过滤器有两个动作,一个是插入 ,一个是查询对于插入操作就是对值放到hash函数中去计算,通过得到的值映射到bit数组中,把对应的位上的值置为1对于查询 就是用插入相同的hash方式 去查找对应的位 检查是不是每一位原创 2021-09-02 14:38:21 · 121 阅读 · 0 评论 -
取消与关闭
取消与关闭两方面1 线程池的关闭线程池的关闭 线程池给了两个方法 一个是shutdown 一个是shutdownnow前者会把队里的任务给执行完,且拒绝再进来的任务。而后者会将队里没有执行的任务返回,且让正在执行的线程执行interrupt2 线程的关闭线程的关闭当然可以用标志符或者线程中断 但是我们也可用Future 和 Callable那套,然后调用cancel总结对于上面的关闭,我们应该知道,它们都是依靠中断机制,即修改线程的中断状态。所以,任务到底能不能停止,得我们自己看我们的任务原创 2021-05-10 17:10:55 · 90 阅读 · 0 评论 -
Logback
logbacklogback 与 log4f出自同一作者。logback是作者对log4j的升级。它实现了slf4j。slf4j是 simple log face for java 的缩写。我们要入门logback 搞懂几个核心类就可了logback要做的事情是什么?它搞定输出那些,输出到哪里,怎么输出 这个三个问题。Logger它负责写日志,他有自己的level。这个我们都知道,ERROR,WARN,INFO,DEBUG,TRACE它们的级别逐级下降。低等级level的logger 调用高原创 2021-05-10 17:07:05 · 209 阅读 · 0 评论 -
任务执行
任务执行大多数并发应用程序都是围绕"任务执行"来执行的:任务通常是一些抽象且离散的工作单元。大多数服务器应用都提供了一种自然的任务边界选择方式:以独立的客户请求为边界。串行的执行任务显式的为任务创建线程无限制创建线程的不足无限制创建线程是非常危险的 理由如下线程生命周期开销非常高 : 线程的创建和销毁并不是没有代价的资源消耗 :活跃的线程会消耗系统资源,尤其是内存稳定性 : 在可创建线程的数量上存在一个限制。如jvm上 thread太多会抛出异常Executor 框架任务是一组逻辑原创 2021-05-10 17:05:58 · 272 阅读 · 0 评论 -
避免活跃性危险
避免活跃性危险在安全性和活跃性之间通常存在某种制衡。即我们在用加锁来保证安全性的时候,可能会引发死锁。死锁对于死锁 有个经典的问题,哲学家就餐,五个哲学家 坐在一个圆桌上,他们中间放着一根筷子,但是只有拿起两字筷子时才能就餐。那么就可能出现五人都无法就餐的情形。即,大家都在持有别人想要的资源,且在等待别人的资源,又在得到前不会放弃手里的资源。锁顺序死锁当两组任务以不同的顺序来获取两个锁,那么就有可能发送死锁。动态锁顺序死锁原理和上面类似,就是任务获取锁的顺序有时候相同,有时候不同。资源死锁原创 2021-05-10 17:03:55 · 80 阅读 · 0 评论 -
对java流的理解
是离散还是连续?什么是流?流是流水线的流 是离散的流 不能 理解为 连续的流而离散的基本单位byte我们不能再次踏入同一条河流对于inputstream 是不可重复读取的 他不是数据源 它像一个水管,打开水龙头 放水 水放完 结束。但是有时候我们又需要重复读取流,我们可以采取重新获取流的方式是输入还是输出?在java中有两种流 一种是in 一种是 out 。有时候我们会对他们的方向很迷惑 但是我们只需要抓住一点in提供read方法 它把数据 一byte 一 byte的返回出来out提供原创 2021-05-10 17:00:32 · 101 阅读 · 0 评论 -
迭代器与ConcurrentModificationException
正如这个异常所示,它的目的是为了避免并发条件下的,一个线程正在对一个集合进行遍历,但是另一个线程却对这个集合的结构进行了修改,即进行了添加 删除操作。本质上就是,这些操作会影响一个modcount的值,而我们在使用迭代器的next方法时,会把预期的modcount和这个modcount做比较,若不一样就会抛出这个异常。这种机制叫 快速失败 它出现在java.util包下的集合类。而java.util.concurrent包却不会出现这个错误。所以我们可以选择并发安全容器。如ConcurrentHashMa原创 2021-05-08 10:19:24 · 113 阅读 · 0 评论 -
java线程中断
java线程中断我们在用线程执行一些任务的时候,可能会遇到要求停止该任务的要求。这里有两个思路标志量一是用标志量 即 在任务内部的某个执行点去判断一个标志量,当该任务执行到该执行点时,且标志判断为需要终止 就可以通过主动抛出一个中断异常来结束该任务。具体实现上,我们可以使用一个volatile修饰的变量来充当这个标志量。线程的中断线程的中断是一种协助式的,我们要理解什么是协助式的,即它需要另一个线程来帮助它 中断。且我们应该注意 这个中断机制是通过interrupt函数,但它只是修改了Thre原创 2021-05-08 10:15:27 · 53 阅读 · 0 评论 -
YML
YML1.什么是yml?yml是一种以yml结尾的具有一定格式的文件,在java的springboot项目中的配置文件里很常见2.yml的优点易于阅读springboot支持具有固定的且较为简易的格式3.yml语法3.1约定k: v 表示键值对关系,冒号后面必须有一个空格使用空格的缩进表示层级关系,空格数目不重要大小写敏感缩进时不允许使用tab键,只允许使用空格对于驼峰表示法如aA可以用a-a替代3.2键值关系有几种关系如下3.2.1 普通如下 表示数字 布尔 字符原创 2021-01-06 17:14:40 · 414 阅读 · 0 评论 -
并发中的异步回调
并发基础中的Future异步回调模式1.1 问题?在多模块架构下,一个模块可能需要调用其他的多个模块,那么如何能做到异步的调用这些模块而且同步的处理这些接口的返回结果勒?1.2 从一个具体的实例聊起我们要烧一壶茶,需要怎么做?需要清洗茶具烧水泡茶前两件事是可以同时进行的,等这两件事情做好了以后,才能干第三件事情。1.3 具体的实现方式1.3.1 join异步阻塞所谓的异步阻塞就是阻塞当前线程然后,直到准备合并的线程执行完毕。流程比较好理解,开启主线程,然后再开启清洗茶具和烧水的线原创 2020-12-26 19:25:52 · 208 阅读 · 0 评论 -
用Netty作为服务端的WebSocket通信
用Netty作为服务端的WebSocket通信的研究报告1 WebSocket1.1为什么要选择WebSocket?http 是无状态协议,为标识用户,通常客户端要带上session。但是它无法解决服务端主动想客户端发送消息的需求。面对并发量高的场景,由于http信息携带的数据大,而对服务器造成较大的负担,所以面对这种场景,WebSocket就上线了。1.2什么是WebSocket?WebSocket是一种基于tcp的新的网络协议,它实现了服务器与浏览器之间的全双工,即浏览器和服务器可以互不影响原创 2020-12-17 15:46:03 · 9738 阅读 · 2 评论 -
jdk1.8新特性
对于流在工作中有用,对于接口中的default也常在jdk源码中看到,今天对它们做一个小小的总结,流在我之前的文章已经讲到过,故在这里不再介绍1.接口中的默认方法这个说起来很简单,就是让接口对方法有了默认的实现。用到的关键字是default。public interface InterfaceDefault { String name (); default void hello () { System.out.println("nihao");原创 2020-08-10 17:45:55 · 111 阅读 · 0 评论 -
http与https
简单描述我们都知道http是一个基于请求,响应的为无状态,应用层传输协议。它是明文传输,就像没有穿衣服的姑娘。https就是要为她穿上衣服,这件衣服就是SLL/TLS。https 有更复杂的 握手过程所以在建立连接是也更耗时,由于存在加密解密的过程,自然也会更消耗性能。在https 的加密过程中会存在 将 使用对称加密和非对称加密同时使用。为什么不直接都是用非对称加密勒?因为非对称加密 比 堆成加密的性能消耗大,效率低对http报文的加密是用对称加密的,这就需用客户端和服务端都需要知道同一个秘原创 2020-07-04 15:54:26 · 793 阅读 · 0 评论 -
用stream找出数组中出现最多次数的数
概述参考文章Java的Stream流式处理JAVA 8 ‘::’ 关键字原创 2020-06-17 17:39:45 · 3695 阅读 · 2 评论 -
java基础之NIO
概述nio是jdk1.4之后引入的技术,现在nio的使用场景比较常见,如tomcat处理连接,所以我们很有必要掌握它。要认识nio就必然要了解这个体系中的三大核心部分,Channel, Buffer, Selector。 传统的io是面向流进行读写,而nio是把数据从Channel中读取到Buffer中,或者从Buffer中把数据写到Channel中。Selector在socket编程中用于分发事件如,建立连接,数据到达等。这让其能用一个线程来管理多个通道。bio在的一些方法会导致阻塞,如accept(原创 2020-06-10 18:42:50 · 159 阅读 · 0 评论 -
java基础之Servlet
定义servlet是service applet的缩写,即表示运行在服务端的应用。狭义的servlet是jdk中的一个接口,广义的解释实现了该接口的类。继承体系显而易见,这个体系比之前分析Spring的创建bean涉及的体系要简单的多。接下来我们单独分析下这个体系涉及的接口Servletpackage javax.servlet;import java.io.IOException;/** * Defines methods that all servlets must implem原创 2020-05-22 17:14:24 · 234 阅读 · 0 评论 -
如何设计一个类——使类与成员的可访问性最小
简介如何区别一个模块写的好不好,有个明显的标志,那就是该模块对于其他模块是否较好的隐藏了内部数据和实现细节。这个概念叫信息隐藏,或者是封装。原因通过信息隐藏可以解耦合,使得独立的模块可以更好的开发,测试,修改等。而不用担心别的模块对其的不必要的依赖。实现方法通过调节模块的访问级别来实现。具体举例要始终秉持着降低访问级别的标准。 对于顶层的类和接口,只有...原创 2018-07-10 19:38:55 · 822 阅读 · 0 评论 -
静态属性,静态方法和静态初始化器
静态属性、静态方法与静态初始化器 static称为静态修饰符,它可以修饰类中的属性和方法。 1.静态属性 被static修饰的属性称为静态属性,这类属性一个最本质的特点是:它们是类的属性,而不属于任何一个类的具体对象。换句话说,对于该类的任何一个具体对象而言,静态属性...转载 2018-07-10 16:18:30 · 2270 阅读 · 0 评论 -
构造代码块
1.什么是构造代码块?没有前缀没有后缀,并用“{}”括起来的代码块。2.特性它会被嵌入到每一个构造器的最前面,在实例化对象时被执行。3.举例package org.qqwe.innerClass;/** * @author 王阳明的徒弟 * @date 2018/7/5 10:06 */public class AnonymousInnerClass { /** * ...原创 2018-07-05 10:29:59 · 963 阅读 · 0 评论 -
java中的回调
什么是回调?答:把方法a作为参数专递给方法b,由b去调用a。没错,记住这句话就可以了。回调在JavaScript中上面的结论在JavaScript中比较好理解,因为在JavaScript中,方法就是对象,可以很方便的传给另一个方法作为参数。在JavaScript中回调多用在资源请求在java中,方法不是对象,无法被传给方法,该怎么理解?先看下面两段代码(出自java编程思想 io)//: io/D...原创 2018-07-04 13:42:55 · 438 阅读 · 0 评论 -
解释执行与编译执行的区别
在学习Python时,提到Python是脚本语言。于是我开始纠结什么是脚本语言,其中重要的一条就是,脚本语言是解释执行的,而像Java这样的高级语言就是编译执行的。A.解释执行 我们的Python就是解释执行,它的特点就是,对源语言写成的源语句进行一句一句的翻译,翻译一句就提交给计算机执行一句,并不会形成目标程序。它的有点是翻译本身并不费事。它的缺点是运行速度慢,比如当程序中存在原创 2017-02-23 23:10:09 · 5382 阅读 · 1 评论