自定义博客皮肤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)
  • 收藏
  • 关注

原创 Win10删除文件需要管理员权限

解决方案按Win+R组合键,输入gpedit.msc点击确定;在窗口边依次打开:计算机配置——Windows设置——安全设置——本地策略——安全选项;在右边窗口找到:用户控制——以管理员批准模式运行所有管理员;右击属性,勾选禁用选项,重启计算机;成功。...

2020-10-24 17:42:18 283

原创 本地缓存和分布式缓存如何实现?

背景缓存(Cache)是指将程序或系统中常用的数据对象存储在像内存这样特定的介质中,以避免在每次程序调用时,重新创建或组织数据所带来的性能损耗,从而提高了系统的整体运行速度。以目前的系统架构来说,用户的请求一般会先经过缓存系统,如果缓存中没有相关的数据,就会在其他系统中查询到相应的数据并保存在缓存中,最后返回给调用方。知识讲解本地缓存是指程序级别的缓存组件,它的特点是本地缓存和应用程序会运行在同一个进程中,所以本地缓存的操作会非常快,因为在同一个进程内也意味着不会有网络上的延迟和开销。本地缓存适用

2020-10-24 10:43:06 340

原创 动态代理是如何实现的?JDK Proxy 和 CGLib 到底有什么区别?

知识解读动态代理的常用实现方式是反射。反射机制是指程序在运行期间可以访问、检测和修改其本身状态或行为的一种能力,使用反射我们可以调用任意一个类对象,以及类对象中包含的属性及方法。但动态代理不止有反射一种实现方式,例如,动态代理可以通过 CGLib 来实现,而 CGLib 是基于 ASM(一个 Java 字节码操作框架)而非反射实现的。简单来说,动态代理是一种行为方式,而反射或 ASM 只是它的一种实现手段而已。JDK Proxy 和 CGLib 的区别主要体现在以下几个方面:JDK Proxy 是

2020-10-21 11:56:29 222

原创 DOS/DDOS攻击你受得了吗?

定义DOS(Denial Of Service)拒接服务攻击。请求太多接受不了,容易造成服务器瘫痪。DDOS(Distributed Denial Of Service),很多台机器分布式的对服务器进行攻击,很难通过简单的封ip的方法来防止这种攻击。传输层攻击TCP的传输过程中,三步握手创建连接的时候,会出现Sync Flood攻击,不停的发SYN包,由此来摧垮你的服务器。而在UDP中也有类似的UDP Flood攻击。应用层攻击如何防止应用层的攻击呢?负载均衡配置。将很多请求均匀的分摊到

2020-10-19 09:57:59 134

原创 如何手动模拟一个死锁?

背景在并发编程中有两个重要的概念:线程和锁,多线程是一把双刃剑,它在提高程序性能的同时,也带来了编码的复杂性,对开发者的要求也提高了一个档次。而锁的出现就是为了保障多线程在同时操作一组资源时的数据一致性,当我们给资源加上锁之后,只有拥有此锁的线程才能操作此资源,而其他线程只能排队等待使用此锁。典型回答死锁是指两个线程同时占用两个资源,又在彼此等待对方释放锁资源,如下图所示:死锁的代码演示如下:import java.util.concurrent.TimeUnit;public class

2020-10-15 13:42:24 603

原创 synchronized 和 ReentrantLock 的实现原理及区别

背景在 JDK 1.5 之前共享对象的协调机制只有 synchronized 和 volatile,在 JDK 1.5 中增加了新的机制 ReentrantLock,该机制的诞生并不是为了替代 synchronized,而是在 synchronized 不适用的情况下,提供一种可以选择的高级功能。典型回答synchronized 属于独占式悲观锁,是通过 JVM 隐式实现的,synchronized 只允许同一时刻只有一个线程操作资源。在 Java 中每个对象都隐式包含一个 monitor(监视器)

2020-10-14 11:26:16 212

原创 ThreadPoolExecutor 的参数含义及源码执行流程

背景线程池是为了避免线程频繁的创建和销毁带来的性能消耗,而建立的一种池化技术,它是把已创建的线程放入“池”中,当有任务来临时就可以重用已有的线程,无需等待创建的过程,这样就可以有效提高程序的响应速度。但如果要说线程池的话一定离不开 ThreadPoolExecutor ,在阿里巴巴的《Java 开发手册》中是这样规定线程池的:线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的读者更加明确线程池的运行规则,规避资源耗尽的风险。说明:

2020-10-13 11:57:23 209

原创 线程到底是如何工作的?

概念线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化,也因此被称为轻量级的进程。...

2020-10-08 17:31:54 1024

原创 Bash Linux Shell到底是什么?

背景Shell是我们与计算机最原始也是最基础的交互方式,现在的使用的操作系统都自带可视化的图形交互界面,但是早期的计算机中是没有图形化用户界面的,用户是通过命令行与计算机进行交互的。其实图形界面能做到的事情,用Shell也能够完成,但是Shell目前存在的意义是什么呢?对服务器的管理通常需要用Shell完成。树莓派和主机的通信默认也是用Shell完成的。Shell本身是一种脚本语言,我们可以用它来做一些自动化的事情,比如定时关机,批量处理图片,自动生成文件列表等等。Shell的种类也有很多,

2020-10-07 10:00:17 555

原创 CAS是个什么玩意?

背景现在有多个线程想要操作同一资源对象,很多人一上来就会选择互斥锁,但是有一个问题就是:互斥锁的同步方式是悲观的。所谓悲观就是,操作系统会悲观的认为:如果不严格同步线程调用,那么一定会产生异常,所以互斥锁将会将资源进行锁定,直供一个线程调用而阻塞其他的线程,这样的同步机制叫做悲观锁。但是悲观锁不是万能的,如果在大量调用都是读操作的情况下,那么就没有必要在每次调用的时候都锁定资源。或者在一些情况下,同步代码的耗时远远小于线程切换的耗时,现在选择悲观锁的话就显得本末倒置了。这是就提出了一个问题,能否不锁定

2020-10-06 18:51:30 162

原创 动态规划是个什么玩意?

背景分治法的使用必须满足 4 个条件:问题的解决难度与数据规模有关;原问题可被分解;子问题的解可以合并为原问题的解;所有的子问题相互独立。然而在实际工作中还存在这样一类问题,它们满足前 3 个条件,唯独不满足第 4 个条件。那么这类问题我们该怎么解决呢?求解这类问题我们可以使用动态规划算法,它是最常用的算法之一。什么是动态规划从数学的视角来看,动态规划是一种运筹学方法,是在多轮决策过程中的最优方法。那么,什么是多轮决策呢?其实多轮决策的每一轮都可以看作是一个子问题。从分治法的视角来看,

2020-10-01 15:52:47 397 1

空空如也

空空如也

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

TA关注的人

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