自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(11)
  • 收藏
  • 关注

原创 面试题--三个线程循环打印ABC10次的几种解决方法

一、使用Semaphore static Semaphore semaphore1 = new Semaphore(1); static Semaphore semaphore2 = new Semaphore(1); static Semaphore semaphore3 = new Semaphore(1); public static void main(String[] args) { try { semaphore2.acq

2021-05-09 20:48:51 181

原创 堆、栈和队列的区别

1、堆和栈 1)堆(完全二叉树,可以看成一棵树的数组对象)是指程序运行时申请的动态内存,而栈只是指一种使用堆的方法(即先进后出); 2)堆是在程序运行时,而不是在程序编译时,申请某个大小的内存空间; 3)栈区由编译器自动分配释放,堆区由程序员分配释放; 2、栈和队列 1)栈栈的插入和删除操作都是在一端进行的(只允许在表尾进行插入和删除),而队列的操作却是在两端进行的(在表尾插入,表头删除); 2)栈是先进后出,队列是先进先出。 ...

2021-05-09 20:39:52 383

原创 TCP和UDP

一、TCP和UDP有什么区别?TCP为什么三次握手而不是两次? TCP是面向连接的服务,而UDP是无连接的,即发送数据之前不需要建立连接 TCP提供可靠交付服务,无差错,不丢失,不重复,按序到达,而UDP提供尽力而为交付服务,不保证可靠交付 TCP面向字节流,而UDP面向报文 TCP具有拥塞控制,力求使每一条TCP连接公平的享用网络资源。UDP没有拥塞控制,网络出现拥塞的时候不会使源主机的发送速率降低(对实时应用很有用) TCP连接只能是点到点的,而UDP支持一对一,一对多,多对一和多对多的交互通

2021-05-09 20:26:11 124

原创 Semaphore详解

1.Semaphore(信号量): 是一种计数器,用来保护一个或者多个共享资源的访问。如果线程要访问一个资源就必须先获得信号量。如果信号量内部计数器大于0,信号量减1,然后允许共享这个资源;否则,如果信号量的计数器等于0,信号量将会把线程置入休眠直至计数器大于0.当信号量使用完时,必须释放。  构造方法1: public Semaphore(int permits) { sync = new NonfairSync(permits); } permits 初始许可数,也就是最大访问线程数构造方法2

2021-05-09 20:24:55 1385

原创 CountDownLatch

1.背景: countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier、Semaphore、concurrentHashMap和BlockingQueue。 存在于java.util.cucurrent包下。 2.概念 countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。 是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的

2021-05-09 20:24:24 81

原创 JAVA中利用反射机制进行对象和Map相互转换的方法

JAVA的反射机制主要作用是用来访问对象的属性、方法等等。所以,JAVA中对象和Map相互转换可以利用JAVA的反射机制来实现。例子如下: 一、对象转Map的方法 public static Map<String, Object> javaBean2Map(Object javaBean) throws Exception { Map<String, Object> map = new HashMap<>(); Method[] m

2021-05-09 20:23:45 349

原创 反射:Reflect(获取类对象三种方法)

1.反射获取对象的三种方法 推荐方式三(因为前两种方式编译的时候都要求有User类,此方式不需要,没有也不会报错) 1.获取类对象 1.方式一:对象获取 2.方式二:类名.class 3.方式三:class.forName(),(推荐) 2代码 try { /** * 获取类对象 */ //1.通过对象获取 User user = n

2021-05-09 20:23:11 159

原创 CAS理解

什么是CAS算法 CAS:Compare and Swap 比较再交换 CAS有三个操作数:内存地址V,旧的预期值A,即将要更新的目标值B CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做,整个比较并替换的过程就是一个原子操作。 CAS的缺陷 循环时间长,开销大 只能保证一个共享变量的原子操作 ABA问题 循环时间长,开销大: 如果CAS失败,会一直进行尝试。如果CAS失败,会一直进行尝试。如果CAS一直不成功,那么会给CPU带来巨大的开销 只能保证一个共

2021-05-09 20:22:44 67

原创 java多线程总结

一、JAVA如何开启线程?怎么保证线程安全? 1.进程和线程的区别 1.进程是资源分配的基本单元,而线程是CPU调度的基本单元。 2.进程有独立的地址空间,线程共享地址空间 3.线程的创建和切换开销比进程小。 4.执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。 5.线程执行开销小,但是不利于资源的管理和保护。 2.如何开启线程 1.继承Thread类。重写run方法。2.实现Runable接口,实现run方

2021-05-09 20:22:07 77

原创 cli3 vue-router-------路由的配置及使用方法

一.什么是vue-router vue-router路由插件,这里的路由并不是指我们平时所说的硬件路由器,这里的路由就是SPA(单页应用)的路径管理器。再通俗的说,vue-router就是我们WebApp的链接路径管理系统。 二.vue-router安装 npm install vue-router --save-dev 三.在src文件夹中创建routes.js配置文件,配置路由的映射关系 import ShowBlog from "./components/ShowBlog" import AddBl

2020-05-18 12:57:20 929

原创 cli3 npm run build 打包index.html访问是空白页面解决!

解决办法: 在项目的根目录下创建vue.config.js文件文件夹下输入一下代码 module.exports = { runtimeCompiler: true, publicPath: './', //输出的根路径 默认是/ 如果你的网站是app.com/vue 这更改此配置项 devServer: { port: 8888 //端口 } } 重新npm run build 即可成功 ...

2020-05-18 12:45:45 423

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除