- 博客(29)
- 收藏
- 关注
原创 SQL按照季度进行查询分组
select companyname ,sum(case when extract(quarter from writetime) =‘1’ then 1 else 0 end) as quarterone,sum(case when extract(quarter from writetime) =‘2’ then 1 else 0 end) as quartertwo,sum(case when extract(quarter from writetime) =‘3’ then 1 else
2022-04-29 17:26:05
897
原创 编写Java程序,车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程,使用Runnable解决线程安全问题
需求说明:车站只剩 50 张从武汉到北京的车票,现有 3 个窗口售卖,用程序模拟售票的过程,要求使用同步方法保证售票过程中票数的正确性实现思路:(1)创建 Java 项目,在项目中创建 SellTicketBySync 类,并实现 Runnable 接口。(2)定义 int 类型的变量 ticket,表示剩余的车票数量,ticket 初始值为 50。(3)创建同步方法 sellTicket()。在该方法体内,判断 ticket 的值是否大于 0。如果 ticket 的值大于 0,则调用Threa
2020-09-30 11:52:29
338
原创 Mybatis用到的几种设计模式
1.工厂模式例如SqlSessionFactory、ObjectFactory、MapperProxyFactory在Mybatis中比如SqlSessionFactory使用的是工厂模式,该工厂没有那么复杂的逻辑,是一个简单工厂模式。简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通
2020-09-22 12:00:46
1950
原创 分享2020常见的MySQL面试题MySQL与答案整理
1、MySQL 中有哪几种锁?1、表级锁: 开销小, 加锁快; 不会出现死锁; 锁定粒度大, 发生锁冲突的概率最高, 并发度最低。2、行级锁: 开销大, 加锁慢; 会出现死锁; 锁定粒度最小, 发生锁冲突的概率最低, 并发度也最高。3、页面锁: 开销和加锁时间界于表锁和行锁之间; 会出现死锁; 锁定粒度界于表锁和行锁之间, 并发度一般。2、MySQL 中有哪些不同的表格?共有 5 种类型的表格: 1、MyISAM 2、Heap 3、Merge 4、INNODB 5、MISAM3、简述在MySQL
2020-09-09 15:26:56
1910
1
原创 AOP的底层实现原理
1、核心问题1、AOP如何创建动态代理类(动字节码技术)2、Spring工厂如何加工创建代理对象通过原始对象的id 值,获得的是代理对象2、动态代理类的创建2.1JDK的动态代理Proxy.newProxyInstance方法参数详解编码:public class TestJDKProxy {public static void main(String[] args) {//1、创建原始对象final UserService userService = new UserService
2020-09-08 11:27:40
338
原创 SQL中where、having、on的区别
知识补充—聚合函数&group bySQL语言中一种特殊的函数。例如SUM, COUNT, MAX, AVG等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。例如:SELECT sId, avg(score)AS avg_score FROM sc GROUP BY sId这里的avg作用在所有返回记录的score字段上,结果就是该查询只返回一个结果,即平均成绩。而通过使用GROUP BY 子句,可以让SUM 和 COUNT 这些函数对属于一组的数据起作用。WHERE 与 H
2020-09-07 12:01:13
227
原创 SQL面试必备50题(超详细步骤讲解)
1.首先说明几个表的关系如下图所示。一共四个表student、score、course、teacher。其中student表中有字段s_id,s_name,s_birth,s_sex;score表中有字段s_id,c_id,s_score;course表中有字段c_id,c_name,t_id;teacher表中有字段t_id,t_name;各表两两相互关联。2.建立数据库与表DROP DATABASE IF EXISTS my_test50;CREATE DATABASE my_test50;
2020-09-04 17:38:36
2259
原创 面向对象 面试题12道
1. 接口与抽象类的区别(1)抽象类:使用sbstract修饰接口:使用interface(2)抽象类:可以有抽象方法和普通方法,抽象方法的类一定是抽象类接口:jdk1.7之前只能有抽象方法,在jdk1.8之后 可以有default、static修饰的方法(3)抽象类:可以有普通的属性(变量 常量等等)接口:只能用常量(4)抽象类:通过普通类继承抽象类{}实现接口:通过类implements接口{}实现(5)抽象类:可以有构造方法接口:没有构造方法(6)抽象类:只能单继承接口:可以多
2020-09-04 15:48:14
301
原创 JDK动态代理和CGLIB动态代理区别
JDK动态代理被代理的类必须要实现有接口,而CGLIB动态代理被代理的类可实现接口也可不实现接口。1.声明一个接口package com.fh.service.aop;public interface AopManager {int add();void list();String delete();void update();void transfer();}2.实现一个接口的被代理类package com.fh.service.aop.impl;import org.sp
2020-09-04 11:08:01
287
原创 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数), 凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
public static void main(String[] args) {//输入人数,并声明长度为人数的数组Scanner input = new Scanner(System.in);System.out.println(“请输入人数:”);int renCount = input.nextInt();int rens[] = new int[renCount];for (int i = 0; i < rens.length; i++) {rens[i] = i+1;}//
2020-09-04 10:27:58
251
原创 Java8的 Stream 流学习与使用总结
1. Stream 流介绍Stream的原理:将要处理的元素看做一种流,流在管道中传输,并且可以在管道的节点上处理,包括过滤筛选、去重、排序、聚合等。元素流在管道中经过中间操作的处理,最后由最终操作得到前面处理的结果。Stream 流的使用总是按照一定的步骤进行,可以抽象出下面的使用流程。数据源 -> 数据处理/转换-> 结果处理1.1. 数据源数据源也就是数据的来源,可以通过多种方式获得 Stream 数据源,下面列举几种常见的获取方式。(1)Collection.stream()
2020-09-03 14:14:00
414
原创 异常中finally的使用
finally:(1)必然执行的异常统一处理出口。(2)无论是否发生异常.finally必然执行,适合存放释放资源,后续处理的代码。总之就是,大部分的情况下,finally一定会执行,但是也有不先执行finally执行的特例=>(1)finally里发生异常.程序不会执行(finally第一句产生异常后续的不会执行)。(2)程序所在线程死亡或关闭了cpu,也就是说外界不可抗力的因素造成的电脑突然关机,停电等。下面看一下两个finally一定会执行后的不同结果:首先先描述一下执行的过程,如
2020-09-03 10:29:55
1233
原创 Redis服务之缓存穿透、缓存击穿、缓存雪崩、解决办法、简述布隆过滤器
Redis服务一、缓存穿透一. 什么是缓存穿透?为了缓解持久层数据库的压力,在服务器和存储层之间添加了一层缓存;一个简单的正常请求:当客户端发起请求时,服务器响应处理,会先从redis缓存层查询客户端需要的请求数据,如果缓存层有缓存的数据,会将数据返回给服务器,服务器在返回给客户端;如果缓存层中没有客户端需要的数据,则会去底层存储层查找,再返回给服务器;缓存穿透就是:当客户端想要查询一个数据,发现redis缓存层中没有(即缓存没有命中),于是向持久层数据库查询,发现也没有,于是本次查询失败;当用
2020-09-02 16:46:04
179
原创 Java创建线程的方式有几种?
1.继承Thread类实现多线程run()为线程类的核心方法,相当于主线程的main()方法,是每个线程的入口(1)一个线程调用两次start()方法将会抛出线程状态异常,也就是start()只可以调用一次(2)native声明的方法只有方法名,没有方法体。是本地方法,不是抽象方法,而是调用c语言方法,registerNative()方法包含了所有与线程相关的操作系统方法(3)run()方法是由JVM创建完本地操作系统及线程后回调的方法,不可以手动调用,通过start调用public class
2020-09-02 14:37:40
154
原创 JVM的相关知识
前言:作为 Java 的从业者,在找工作的时候,一定会被问及关于 JVM 相关的知识。 JVM知识的掌握程度,在很多面试官眼里是候选人技术深度的一个重要评判标准。 在这里我们将详细的整理常见的 JVM 面试题目,并给出标准答案,提供给大家学习参考。等大家面试的时候,希望能对面试官吹个半个小时。1、内存模型以及分区,需要详细到每个区放什么:JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面, class 类信息常量池(static 常量和 static 变量)等放在方法区 ne
2020-09-02 10:53:27
154
原创 设计模式学习——工厂模式
简单工厂模式基本介绍(1)简单工厂模式属于创建型模式,是工厂模式的一种,简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。(2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)(3)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。简单工厂模式类图实例简单工厂模式java实现代码//Pizza抽象类public abstract class Pizza {protected
2020-08-31 18:09:59
110
原创 RocketMQ (五) Springboot 整合 RocketMQ 收发消息样例
pom文件创建 springboot 项目,添加rocketmq-spring-boot-starter依赖。<dependencies> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>
2020-08-31 15:41:54
1026
原创 java常见的5种异常举例
在Java学习过程中,我们会碰到各种各样的异常,现将面试过程中遇到的常见异常做一罗列并举例:1.NullPointerException: 空指针异常。菜鸟编程经验发现这个异常是经常会发生的,属于运行时异常。举例:public static void main(String[] args) {String str = null;//此处报空指针异常System.out.println(str.length());}控制台输出的异常信息为:Exception in thread “main”
2020-08-31 15:02:10
1438
1
原创 synchronized的实现原理——对象头解密
前言并发编程式Java基础,同时也是Java最难的一部分,因为与底层操作系统和硬件息息相关,并且程序难以调试。本系列就从synchronized原理开始,逐步深入,领会并发编程之美。正文基础稍微好点的同学应该都知道,Java中获取锁有两种方式,一种是使用synchronized关键字,另外一种就是使用Lock接口的实现类。前者就是Java原生的方式,但在优化以前(JDK1.6)性能都不如Lock,因为在优化之前一旦使用synchronized就会发生系统调用进入内核态,所以性能很差,也因此大神Doug
2020-08-31 11:55:30
181
原创 4种常用线程池介绍
一. 线程池简介线程池的概念:线程池就是首先创建一些线程,它们的集合称为线程池。使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动一条线程来执行这个任务,执行结束以后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个任务。线程池的工作机制:2.1 在线程池的编程模式下,任务是提交给整个线程池,而不是直接提交给某个线程,线程池在拿到任务后,就在内部寻找是否有空闲的线程,如果有,则将任务交给某个空闲的线程。2.2 一
2020-08-28 17:05:23
368
原创 轻松理解 MySQL InnoDB 索引、B+树索引、查询原理
前言索引对于DB查询的性能起到至关重要的作用。对于索引如何提升查询性能,通常都会拿查字典来做类比。字典前面会有拼音索引,我们查字典会先查拼音索引,以此来提高查字典的速度。对于这个类比,我们可以思考的更深入点,看看通过拼音索引提升查询速度的根本原因是什么。我们考虑如下几个问题:1、通过拼音索引能直接定位到字的具体位置吗?不能,拼音索引只能定位到字所在的页,如果想找到所要的字或者词,还需要在页中再次定位。这个过程和InnoDB的索引设计相同,通过索引只能定位到数据所在页。2、定位到页后,如何定位到具体字
2020-08-27 17:34:33
242
原创 Redis基础详解
一、Redis 是什么Redis 是一个开源的、key-value 结构的、非关系型数据库。它支持存储的 value 类型相对更多,包括 String(字符串)、List(列表)、Set(集合)、Sorted Set(有序集合) 和 Hash(哈希),而且这些操作都是原子性的。在此基础上,Redis 支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。Redis 可以周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。使用 Re
2020-08-27 12:00:51
925
原创 MyBatis简介及工作原理
简介Mybatis是一款优秀的持久层框架,它支持定制化SQL。存储过程以及高级映射。Mybatis消除了几乎所有的JDBC代码和手动设置的参数以及获取结果集。Mybatis使用简单的XML用于配置和原始映射,将接口和java当中的pojo映射成数据库中的记录。Mybatis的优点(1)简单易学:Mybatis本身就很小,而且很简单。它没有任何第三方的依赖,只需要安装2个jar文件+配置几个SQL映射文件易于学习,也易于使用。通过文档和源代码,可以比较完全的掌握它的设计思路和实现。(2)灵活:myba
2020-08-27 09:55:59
2594
原创 关系数据库设计:谈谈规范化技术
数据库规范化为什么需要规范化很多文章都是直接从第一范式开始介绍如何进行数据库设计,完全忽略了对事物前因后果的分析。从而导致我们看完之后,只知道关系数据库要进行规范设计。因此,我们首先来给大家介绍一下规范化之前发生了什么。假设我们需要为某公司设计一个数据库,用于管理员工、部门、职位等相关的信息。首先从直观上考虑,可以将员工信息、所在部门以及职位信息存储到一个表中,如下图所示:每一行数据对应一个员工的信息,包括他/她所在的部门、职位等。如果真的这么设计,我们在实际应用中很快就会发现以下各种问题:数
2020-08-26 13:46:23
1172
原创 不懂的知识和不懂的技术
ArrayList转数组当我们在工作当中需要数组的时候,有的时候我们不确定数组的长度到底是多少。这个时候我们可以建立一个ArrayList的集合,然后将我们所需要的元素给添加到集合里面。通过list.size这个方法获得集合的长度。再用toArray这个方法把集合转换成数组。日期的比较在某些时候,我们需要对2个日期进行比较。我们首先获得它的Date的值date。然后通过Calendar.getInstance()这个方法创建一个对象calendar。利用calendar.setTime(date)这个
2020-08-17 16:23:28
196
原创 Mysql的学习笔记
Mysql介绍Mysql是一个中小型的关系数据库管理系统,是用来存储数据的。目前我使用的版本是Mysql5.5,它在性能上相比之前的版本有了很大的提升。在Mysql5.1.x之前的版本中,默认的存储引擎是MyISAM,每个MyISAM在磁盘上会将数据存储成三个文件。第一个文件是表结构文件,为.frm文件存储表定义。第二个文件是数据文件,其扩展名是.MYD。第三个文件是索引文件,其扩展名是.MYI...
2019-11-06 13:44:39
119
原创 Maven学习笔记
1.何为mavenmaven是一个跨平台的项目管理工具,作为Apache组织中一个颇为成功的开源项目。maven主要服务于基于java平台的项目构建,项目依赖管理和项目信息管理。在windows上安装mavenmaven必须运行在jdk1.4及以上的版本。我们首先要配置jdk的环境变量JAVA_HOME是否指向jdk的根目录,然后用path指向jdk的bin目录,用java -version...
2019-10-21 13:27:50
164
原创 如何用SpringBoot开发一个分布式的项目
如何用SpringBoot开发一个分布式的项目spring框架随着时代发展的衍生物.spring框架的发展追寻简化过程,但是总不能离开xml的配置.springboot基于spring框架的可以实现自动配置独立运行框架容器(不依赖其他容器),快速搭建框架的工具框架.默认springboot开发一个web应用,可以通过依赖实现内嵌的servlet容器启动,默认是tomcat,可以配置其他jet...
2019-09-24 11:20:05
3040
1
原创 Spring和SpringMVC框架的理解
Spring和SpringMVC框架的理解Spring是一个Service层的框架,可以整合许多其它框架进行工作。Spring的主要技术是 IOC(DI) AOPIOC(DI) - 控制反转(依赖注入)AOP - 面向切面编程Spring IOC所谓的IOC称之为控制反转,简单来说就是将对象的创建的权利及对象的生命周期的管理过程由Spring框架来处理,从此在开发过程中不再需要关注对象...
2019-08-23 16:28:44
728
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人