Spring项目读取静态资源文件的方法
待更新。。。
布隆过滤器相关
如果想要快速判断一个元素是不是在一个集合里,可以怎么做?一般想到的是用一种数据结构将所有元素保存起来,然后通过比较确定。数组,链表,树等等数据结构都是这种思路.但是随着集合中元素的增加,使用数组链表等结构,我们需要的存储空间越来越大,检索速度也越来越慢(O(n),O(logn))。不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构(有一个动态数组,+ 一个hash函数)。
但是有些时候我们只是需要知道某个元素是否在一个集合里面,其实并不需要存取这个元素本身,所以并不需要像hashMap或者hashSet那样存下所有数据。这个时候就要引入布隆过滤器了。
什么是布隆过滤器布隆过滤器(Bloom Filter)是1970年由布隆提出的,它实质上是一个很长的二进制向量和一系列随机映射函数 (Hash函数)。它用于判断这样的一个事情:某一个元素是否存在于一个集合里面。集合中的元素由哈希函数的映射规则,映射bitMap上的某一位;在bitMap上的每一位都是一个布尔类型的值,有两种状态0和1,0表示不存在于集合中,1表示存在于集合中,初始值都是0。这样相比较于使用数组、链表 ...
动态代理的原理
更新中……
反射相关
什么是反射?JAVA反射技术是在运行状态中:
对于任意一个类,都能够知道这个类的所有属性和方法(包括私有)
对于任意一个对象,都能够调用它的任意一个方法,访问任意一个属性。
这种动态获取类型信息,以及动态调用对象方法的功能,被称为Java语言的反射机制。
总之,反射是提供获取运行时类信息的一种技术,或者更通俗一点反射技术就是操作一个类的Class对象。
反射可以在程序运行的过程中,动态地加载一个类,并且能拿到一个类的全部详细信息,从而可以操作该类的属性和方法。反射技术源于Class对象,其本质就是通过一个类的Class对象来获得该类的信息,并操作该类的属性和方法。反射技术应用的起点就是获取某个类的Class对象。那么什么是Class对象?
关于Class对象什么是Class对象?用来描述一个类的对象。Class对象作为一个对象,其也是由类创建出来的,这个类就是java.lang包下的Class类,Class类没有公共构造函数,Class对象是由Java虚拟机在加载类时自动构建的,通过调用类加载器中的defineClass方法来构建。类加载的过程可以分为三步:加载,链接,初始化。其中 ...
线程池的创建与使用
当我们要并发处理一些任务的时候,需要使用到多线程技术。一般是通过new Thread()来新建一个线程实现并发执行,但是这样做其实有不少的弊端:主要是因为频繁进行线程的创建和销毁非常耗费性能和资源,一个线程大费周章的创建后,可能只是简单执行一些任务后就马上大费周章的销毁,做不到复用。同时如果短时间内大量的任务到来,线程大量的创建,此时系统会出现性能的瓶颈,甚至占用过多资源而阻塞系统或oom等状况,从而降低系统的稳定性。因此使用线程池是更常用的方法,使用线程池的好处能够很好的解决上面面临的问题:降低系统资源消耗、提高系统响应速度、方便线程的管理。
一般来说线程池的创建和使用有三种方式:一种是使用juc包下的Executors 工厂类,另一种是直接new一个ThreadPoolExecutor实例,其实juc包下的Executors 工厂类底层也是new的ThreadPoolExecutor实例来实现的。还有一种是使用Spring封装的线程池,底层也是对ThreadPoolExecutor的封装。
Java线程池的核心参数线程池在创建的时候需要指定7个参数,分别是:
corePoolSi ...
对于池化思想的理解
对于池化思想的理解什么是池化思想池化技术(Pooling),我们平常所说的池化技术常用的有两个,一个是各种编程语言中用来进行资源管理的一种技术,还有一种是应用在深度学习中,用来降低卷积神经网络(CNN)或循环神经网络(RNN)中的特征图(Feature Map)的维度的一种技术。本文在讲的是第一种。
我们在各种计算机技术中,池化技术是一种常见的资源管理技术,它可以通过预先创建和维护一定数量的资源实例来提高系统的性能和可靠性。从字面意义上来理解“池化技术”最主要的就是一个“池”字,什么是“池”?可以理解为一个容器,用来装东西的容器,装什么东西?装各种我们常用的资源。在编程的过程中,我们有时候需要用到一些资源,我们需要向操作系统申请,或者我们需要创建,比如一些连接对象,或者线程对象。需要的时候创建,用完之后释放,这是以前我们的主要方式。但是有这样的一个问题,有一些资源的申请或对象的创建和销毁实际上是很耗费时间的,当系统的面对一个人申请创建的请求的时候没什么,但是当请求多起来的时候,系统的压力就会变得非常大,这时候就会出现系统的瓶颈。
我们想一下,我们在某些场景下需要频繁用到的一些资源对象, ...
对于面向对象思想的理解
什么是面向对象,谈谈你对于面向对象的理解。面向对象是一种程序设计思想。当我们谈到面向对象的时候总是会谈到面共享过程。那怎么样理解面向过程,又怎么样理解面向对象呢?其实很好理解,从我们拿到一个需求开始,我们同样想完成一个需求,面向过程的思想着重于完成这个需求的步骤过程,
首先将这一个大的整体的需求细化分解成每个小的步骤
然后安排每个步骤要完成什么样的功能,以及如何完成这样的功能
最后就是将上面的步骤合理的安排其先后顺序,让其最后能够实现一开始的需求。
而面向对象思想在面对一个需求的时候,
首先想的是要完成这个需求功能,涉及到了那些对象,涉及了那些类,
这些类和对象要有什么属性和行为
这些类和对象之间要如何协作完成这样的一个需求。
面向过程思想,先具体逻辑细节,后抽象问题整体;面向对象,先抽象问题整体,后具体逻辑细节,先考虑对象,然后考虑对象里面的行为和属性。在软件开发中,在宏观上,我们使用面向对象来把握事物之间复杂的关系,分析系统;在微观上,仍然是面向过程的。就比如我们抽象出一个类,但是深入到类里面的行为的时候,其实还是面向过程的。
面向对象的思想其实是来源于我们的现实世界。从宏 ...
有关Java的时间戳问题
背景在做力扣的355题设计推特https://leetcode.cn/problems/design-twitter/description/时,一个主要的功能是要倒序返回一个用户以及他的所关注用户的前十条推文列表。我的做法是设计一个推文类,该类里面有一个成员变量createdTime,在生成一个推文类的时候记录该类生成的时间戳。然后等到返回推文列表的时候用一个TreeSet容器,通过自定义排序规则来实现按照生成时间倒序返回的目的。其中涉及到Java里面的时间戳的生成。我一开始使用的是System.currentTimeMillis()方法,这个方法返回的是一个毫秒精度的时间戳。但是这样做是有问题的,会卡在:连续调用函数生成推文类的用例那里。当我将代码搬到idea上debug的时候,发现了一个诡异的事情,直接run的时候会出bug,连续生成的两个推文类到最后返回的时候会吞掉一个;但是用debug模式的时候,有时候是正确的输出,有时候又是和run模式一样的错误的输出。一开始我以为是idea的debug模式会比run模式多执行了一些方法的问题(比如idea在debug模式下会自动调用一些集 ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment