LeetCode-SQL
大的国家
方法一:123SELECT name,population,areaFROM World WHERE area >= 3000000 or population >= 25000000
方法二:通过union合并两个查找结果
12345678910111213141516SELECT name, population, areaFROM worldWHERE area >= 3000000 UNIONSELECT name, population, areaFROM worldWHERE population >= 25000000;
可回收且低脂的产品
123456SELECT p.product_idFROM Products as pWHERE p.low_fats = 'Y' AND p.recyclable = 'Y'
寻找用户推荐人
方法一:1234SELECT c.nameFROM customer as cWHERE ...
Stream流
获取流根据List获取流12ArrayList<Object> list = new ArrayList<>();Stream<Object> stream = list.stream();
根据Set集合获取流12HashSet<Object> set = new HashSet<>();Stream<Object> stream = set.stream();
根据Map集合获取流根据键获取流12HashMap<Object, Object> map = new HashMap<>();Stream<Object> stream = map.keySet().stream();
根据值获取流12HashMap<Object, Object> map = new HashMap<>();Stream<Object> stream = map.values().stream();
根据键值对对象获取值12HashMap<O ...
哈希表题目
哈希表概念哈希表是根据关键码的值而直接进行访问的数据结构。实际上其实数组也是一张哈希表,哈希表中关键码就是数组的索引下标,然后通过下标直接访问数组中的元素
一般哈希表都是用来快速判断一个元素是否出现集合里
哈希法是牺牲了空间换取了时间,因为要使用额外的数组,set或者是map来存放数据,才能实现快速的查找
哈希函数哈希函数,就是将元素直接映射为哈希表上的索引,然后就可以通过查询索引下标进行快速访问
哈希函数如下图所示,通过hashCode把名字转化为数值,一般hashcode是通过特定编码方式,可以将其他数据格式转化为不同的数值。
拉链法当出现哈希碰撞的时候,发生冲突的元素都被存储在链表中
拉链法就是要选择适当的哈希表的大小,这样既不会因为数组空值而浪费大量内存,也不会因为链表太长而在查找上浪费太多时间。
线性探测法使用线性探测法,一定要保证哈希表大小大于数据大小。 因为需要依靠哈希表中的空位来解决碰撞问题
如果出现冲突的位置,那么就向下找一个空位放置。所以要求tableSize一定要大于dataSize ,要不然哈希表上就没有空置的位置来存放冲突的数据了
结合数组有效 ...
并发专题
线程状态
初始状态(NEW)实现Runnable接口和继承Thread可以得到一个线程类,new一个实例出来,线程就进入了初始状态。
运行状态(RUNNABLE)Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)
阻塞状态(BLOCKED)当获取锁失败后,由可运行进入 Monitor 的阻塞队列阻塞,此时不占用 cpu 时间
当持锁线程释放锁时,会按照一定规则唤醒阻塞队列中的阻塞线程,唤醒后的线程进入可运行状态
等待(WAITING)处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒,否则会处于无限期等待的状态。
超时等待(TIMED_WAITING)当获取锁成功后,但由于条件不满足,调用了 wait(long) 方法,此时从可运行状态释放锁进入 Monitor 等待集合进行有时限等待,同 ...
单例模式专题
单例模式保证了系统内存中该类只有一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能
使用场景:需要频繁创建和销毁的对象、创建对象耗时较多、耗费资源过多但又经常用到的对象、工具类对象、频繁访问数据库和文件的对象(比如数据源或session工厂)
饿汉式优点:在类装载的时候就完成了实例化,避免了线程同步的问题
缺点:在类装载的时候就完成了实例化,没有达到Lazy Loading的效果,如果至始至终没有用到这个实例,那么会造成内存的浪费
静态常量方方式创建1、构造器私有化(防止通过 new 创建一个对象实例)
2、类的内部创建对象
3、向外暴露一个静态的公共方法,通过该方法返回该类的对象实例(getInstance)
静态代码块方式创建
与上面的方式其实类似,只不过将类实例化的过程放在了静态代码块中,也是在类装载的时候,就执行静态代码块中的代码,初始化类的实例。优缺点和上面是一样的,可能造成内存浪费
枚举方式创建enum类的本质其实是一个final修饰的类,因为枚举的性质,INSTANCE 又是由final static修饰的,所以我们用 ...
集合专题
ArrayListArrayList无参构造的初始容量为0
ArrayList有参构造的初始容量根据所给的长度进行创建(如果是集合,就根据集合的大小进行创建)
调用add方法触发扩容当往ArrayList添加元素的时候。触发第一次扩容,创建一个长度为10的新数组,然后将元素添加进新数组里面,再用新的数组替换掉旧的空数组。
当数组内元素为10时,进行第二次扩容,扩容为第一次容量的1.5倍,即15(以后每一次扩容都是上一次的1.5倍)
注意:此处的1.5倍其实是上一次容量二进制右移一位,再加上它本身,如第三次扩容:15右移一位是7,7+15为22
调用addAll方法触发扩容在下一次扩容的容量跟实际的元素个数之间选择一个较大值
如:添加元素个数为16个,那么数组容量将会扩容到22
0 10 15 22 33 49 73 109
IteratorFail-Fast策略在通过迭代器遍历的同时如果有人对集合进行修改,那么就抛出异常
ArrayList的迭代器采用了Fail-Fast策略
源码分析增强for循环在首次调用内部会生成一个迭代器,在执行过程中,expectedM ...
SpringMVC(待更新)
DispatcherServlet初始化时机
启动类
12345>private static final Logger log = LoggerFactory.getLogger(A20.class);>public static void main(String[] args) throws Exception {>AnnotationConfigServletWebServerApplicationContext context = new AnnotationConfigServletWebServerApplicationContext(WebConfig.class);>}
Config类
1、创建内嵌的web容器工厂
2、创建 DispatcherServlet
3、注册 DispatcherServlet
12345678910111213141516171819202122>@Configuration>@ComponentScan>public class WebConfig {&g ...
AOP
ajc编译器使用aspectj编译器插件来改动class类文件来实现增强(在编译阶段)
编译器增强能突破代理仅能通过方法重写增强的限制:可以对构造方法、静态方法等实现增强
12345678910111213141516171819202122<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>aspectj-maven-plugin</artifactId> <version>1.14.0</version> <configuration> <complianceLevel>1.8</complianceLevel> <source>8</source> <target>8</target> <showWeaveInfo>true</showWeaveInfo& ...
容器与Bean
BeanFactory它是ApplicationContext的父接口
它才是Spring的核心容器,主要的ApplicationContext的实现都组合了它的功能
比如使用ApplicationContext的getBean方法,实际上先拿到BeanFactory对象,再去调用BeanFactory的getBean方法
BeanFactory表面上只有getBean功能实际上,控制反转,基本的依赖注入,直至Bean的生命周期都是由它的实现类提供
ApplicationContext功能
MessageSource:处理国际化资源的能力(翻译) 比如 getMessage方法
RessourcePatternResolver:通配符匹配资源的能力 比如 getResources方法
1234567//表示在resources目录下的META-INF子目录下的spring.factories文件和jar包内的......//*号表示也可以jar内进行搜索Resource[] resources = context.getResources("classpa ...
模拟解析@Bean注解
点此返回
123456789101112131415161718192021222324252627282930313233343536373839404142public class AtBeanPostProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory (ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { try { //读取类信息 CachingMetadataReaderFactory factory = new CachingMetadataReaderFactory(); MetadataReader reader = factory ...