- 博客(43)
- 收藏
- 关注
原创 解决传入参数默认可能为0,又需要进行筛选的查询
问题描述假如我需要查询一个东西,就把这个东西当成球吧,一个球有不同的分类,所以有一个分类id叫做category_id。然后这个球又有不同的品牌,所以还有一个brand_id。当然,除了这两个之外还有别的一些属性。class Ball{ private int category_id; private int brand_id; //xxx 其他属性}就大概是这么个结构,所以category_id与brand_id确定唯一的一条数据,并且也会只根据category_i
2021-05-22 17:18:09
494
原创 Lock源码深度解析(lock方法unlock方法、AQS)
大家好,我是wave。今天是圣诞节,我们就不聊学习了,随便在这里写点什么吧~闲聊今年的圣诞节由于我没有去公司实习,而且在家想多陪陪父母(毕竟去了北京估计一年就回来一次了),所以今天的圣诞节真的有点冷冷清清的感觉。身边的大学同学基本都去公司实习了,高中同学要么在考公研要么在考公务员。在老家目前真的连一个打球的朋友都找不出来。最后实在无聊去了一家小学培训机构辅导六年级语数英作业。。。然后发现现在小学可太难读了,作业一堆一堆的,一般5点开始做作业要8点左右结束。偶尔九点十点也是会有的。做老师就感受到了老.
2020-12-30 16:15:45
714
4
原创 全网最详细的synchronized讲解(锁升级、查看对象头标记、底层实现)
大家好,我是wave,这次来和大家详细的聊一聊Synchronized这个关键字,希望大家看完可以对synchronized关键字有一个非常全面的了解。Synchronized基本操作synchronized主要有三种使用方式:修饰实例方法: 给一个类上的方法添加synchronized关键字,这个锁会作用于这个类当前的实例对象上,进入同步代码前要获得 当前对象实例的锁public synchronized void method(){ // do something.
2020-12-17 20:53:54
640
原创 Thread、Runnable、Callable基本操作线程基本概念
大家好我是wave,本篇文章给大家介绍一些有关线程的基本概念与线程的一些基本操作线程与进程进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。还存在资源开销、包含关系、内存分配、影响关系、执行过程等区别。同一进程的线程共享本进程的地址空间和资源(堆和方法区),而进程之间的地址空间和资源相互独立。举个栗子就是我们从桌面随便打开一个应用程序,比如开启一个qq或者wegame,都算是启动了一个进程。而线程是一个比进程更小的单位,比如在qq打开多个聊天窗口与别人聊天,就是一种多.
2020-12-12 10:16:06
347
原创 ArrayList源码分析
之前给大家讲了讲Java的各种集合,今天来带大家深入了解一下ArrayList的源码ArrayList类的定义public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{首先来看看ArrayList这个类的继承关系AbstractList是一个抽象类,它里面只有一.
2020-12-08 11:00:04
144
原创 Java中常见集合的基本使用
今天来给大家讲讲JAVA中的几种集合~可以看到上面的继承关系分为两类,一类为collection,一类为map。说白了就是collection里面放入值是一个一个的,而map是一个键值对,每一个key对应一个value,所有map的每一个值都是一对键值对。我们从上面这幅图左边开始讲解一些常用集合的使用方式。Arraylist首先介绍一下ArrayList这个集合,这个集合在平常用的算是最多的一个集合的。这个集合也特别好理解,和它的名字一样,ArrayList可以想象成一个数组链表,也
2020-12-06 18:59:37
752
2
原创 JavaIO的基本操作
这篇文章给大家介绍一下Java中基本IO操作,希望大家看完这篇文章可以自己完成一个文件的拷贝操作FileIO操作就是对文件的操作,在Java万物皆对象的思想下,我们不难想到肯定会有一个类是用来表示文件的。Java中用来表示一个文件的类就是File类,使用这个类可以对文件进行一系列的操作,比如打开文件、获取文件路径、获取文件名字等等操作。我们要对文件进行操作,就必须依靠这个对象来打开文件[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7EbkCxbG-1.
2020-12-05 19:29:38
308
原创 HashMap面试知识点总结
讲道理hashmap在面试中问的还是蛮多的,有些基本的知识还是一定要会基本数据结构:JDK1.7:数组 + 链表JDK1.8以后:数组 + 链表 + 红黑树hashmap首先是一个线程不安全的容器,也不允许key和value为null。hashmap的初始容量为16,负载因子默认为0.75,扩容条件为hashmap里面的存放元素的数量大于等于数组长度乘以负载因子。每次扩容都会扩容为2的n次方。2的n次方有一个好处,因为计算桶的位置的时候首先对值计算hashcode,然后hashcode需要对数组长
2020-09-08 10:25:36
227
2
原创 dubbo面试知识总结
dubbo是一个rpc远程调用的框架,用于分布式的远程调用。核心组件为:运行容器、服务提供者、服务发布者、监视器、注册中心。为什么用dubbodubbo为soa架构的分布式项目提供了便利,使表现层调用服务变的非常简单,而且dubbo提供了很多不同的传输协议、不同的负载均衡策略、和调用链监控、完全支持spring这些好处。dubbo支持不同的协议dubbo协议rmiwebservicehttpredis如何调用不同的协议dubbo使用spi机制加载配置文件实现du
2020-09-04 21:18:08
575
原创 synchronize锁升级机制总结
锁升级(膨胀)过程synchronize锁升级过程:jdk高版本之后对synchronize关键字进行了很多优化,其中一项就是锁升级,以前synchronize默认就是悲观锁,是在JVM层面上加锁的,加锁解锁的开销都比较大。所以引入了偏向锁、轻量级锁、重量级锁。那么偏向锁、轻量级锁、重量级锁又是什么偏向锁:我认为偏向锁的关键就是“偏”,偏向于第一个访问的线程。也就是说在无竞争的环境下,有一个线程访问的同步代码块,那么这个锁就会偏向这个线程,下次有线程访问的时候就会判断是不是之前访问过的线程访问,这样就
2020-09-02 11:19:55
1935
原创 tomcat类加载机制
tomcat为什么要打破双亲委派?tomcat作为一个服务器需要完成几个功能:部署在服务器中的应用程序的类库互相隔离开,因为有可能两个应用程序用了同一个类库的不同版本。相同的类库一个服务器中存在一个。web容器本身也有类库,不能与应用程序的混淆。需要热加载jsp文件,所以对于jsp需要有自定义类加载器。jvm默认类加载器无法满足这些要求,因为默认类加载器无法加载同一个类库的不同版本。jsp由于每次修改后都要加载,所以每个jsp应该都有唯一的一个类加载器,所以也不满足默认类加载器要求tomc
2020-09-01 10:15:12
119
原创 ActiveMQ知识整理 + 面试题
AcitveMQ首先,说起ActiveMQ,就必须先聊聊JMS(Java Message Service)规范,也就是Java消息服务,它定义了Java中访问消息中间件的接口的规范。JMS只是接口,并没有给予实现,实现JMS接口的消息中间件称为 “JMS Provider”,目前知名的开源 MOM (Message Oriented Middleware,也就是消息中间件)系统包括Apache的ActiveMQ、RocketMQ、Kafka,以及RabbitMQ,可以说他们都 “基本遵循” 或 “参考”
2020-08-31 11:37:49
586
1
原创 Syn笔记--jol查看对象头
jol查看对象头来分析一波synchronize关键字加锁过程synchronize在jdk1.5之前就是一个重量级的锁,是在jvm层面加锁的一种形式,在字节码运行的过程中被翻译成了两个指令,速度很慢。jkd1.6开始对synchronize进行了非常多的优化,使sync有了一个锁升级机制,可以让sync在不同的场景下加不同的锁,大大提升了sync的效率。sync一共有三种锁状态:偏向锁、轻量级锁、重量级锁。下面通过查看class对象头的方式来查看这几个锁状态是怎么表现的。import org.open
2020-06-08 16:25:15
790
2
原创 树的前中后序
前序就是根左右,中序就是左根右,后序就是左右根树结构/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } ...
2020-04-14 21:55:17
144
原创 C++大数乘法
c++版本的大数乘法#include<iostream>#include<string>#include<algorithm>#include<cstdio>#include<vector>#include<set>#include<cmath>#include<cstring>#in...
2020-03-30 17:30:40
149
原创 阿里第一轮笔试第二题
第一题完全不会,第二题被自己蠢哭,递增的字符串只需要判断前一个的最后一个字符和第二个子串的第一个字符就可以了,我居然写成了两个字符串比大小,唉,可能这就是命吧。深搜加记忆性递归应该可以满分(我居然被一个比较函数搞成了零分,心态炸裂)。#include<iostream>#include<string>#include<algorithm>#include...
2020-03-20 19:48:57
212
原创 dp模板(01背包 完全背包 最长子序列)
01背包for(int i=1;i<=n;i++){ for(int c=m;c>=0;c--) { if(c>=w[i]) f[c]=max(f[c],f[c-w[i]]+v[i]); }}完全背包for(int i=1;i<=n;i++){ for(int c=0;c<=m;c++) ...
2020-03-14 15:45:42
97
原创 Redis分布式锁的演化
使用redis来实现一把分布式锁普通分布式锁一把普通的redis分布式锁,原理是setnx只有在第一次设置的时候才生效,等于第一个setnx成功的线程得到了这把锁,其他线程设置失败就直接返回了,只有当这个线程执行完毕,把这个锁给删除,别的线程才能得到这个锁。 //伪代码 private Jedis jedis; public String doLock(){ ...
2020-02-27 18:45:22
177
原创 二叉树的遍历(中序后序转层序和前序)
Sample Input:72 3 1 5 7 6 41 2 3 4 5 6 7Sample Output:4 1 6 3 5 7 2先转换成前序,然后在每一个节点带一个index,最后排序一下就是层序的结果了#include<iostream>#include<string>#include<algorithm>#include<cs...
2020-02-09 16:13:56
463
原创 pat 1044 Shopping in Mars (二分查找)
思路把钻石数量累加起来,这样数组sum[i]就是1到i的值,这样数组就变成了递增的,就可以使用二分查找,从1开始循环**sum[mid] - sum[i - 1]**就可以找到最小的i 到 j的值。最后把结果保存起来#include<iostream>#include<string>#include<algorithm>#include<cstd...
2020-02-09 11:03:05
105
原创 Nio文件的读写
具体思路:打开一个文件,把文件以字节读到buffer中,再把buffer进行一次flip,就可以把buffer写入到一个文件中了。如果没有clear方法会产生死循环,一直把buffer读到文件中。不写clear方法分析:第一次read之后position等于limit,read等于buffer字节数,flip之后,position为0,limit不变,把buffer读进文件中,position等...
2020-02-02 10:58:11
406
原创 Java排序方法
由于之前基本都是用c++写算法,导致java排序库函数非常不熟悉,记录一下java库函数排序方法基本数据类型的排序public static void main(String[] args) { Integer[] a = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5}; Arrays.sort(a); for (Integer i...
2020-01-09 10:00:47
101
原创 pat1014 Waiting in Line
记录一下这个队列操作思路:有多少个窗口就开多少个队列,一个队列和poptime、endtime组成一个新的数据类型,poptime代表对首出队列的时间,endtime代表队尾人结束时间。每次循环找出poptime最短的,打表记录这个点结束的时间,最后查表就行了。#include<iostream>#include<string>#include<algorit...
2020-01-08 16:14:42
123
原创 java异常类型记录
Throwable包含看错误(Error)和异常(Exception两类)Exception又包含了运行时异常(RuntimeException,又叫非检查异常)和非运行时异常(又叫检查异常)1、error是程序无法处理了,如果outOfMenoryError,OutOfMemoryError等等,这些异常发生,java虚拟机一般会终止线程。2、运行是的异常都是RuntimeExceptio...
2019-10-25 16:49:57
98
原创 合并 k 个排序链表(java)
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[1->4->5,1->3->4,2->6]输出: 1->1->2->3->4->4->5->6 public ListNode mergeKLists(ListNode[] lists){ if(lists.l...
2019-08-18 09:04:06
332
原创 正则表达式匹配(Leetcode - java)
给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。思路:匹配的时候有三种可能,p[j]和s[i]刚...
2019-08-13 16:11:03
437
原创 java分页--标签版
自定义标签的方法实现分页首先需要一个分页对象,在某个pojo里面加上这三条属性并生成get set方法//当前页 private Integer page; //每页数 private Integer size = 10; //开始行 private Integer startRow = 0;再加入自定义标签的两个类package cn.wave.comm...
2019-08-03 17:03:38
210
原创 分页笔记-servlet版
导包链接:https://pan.baidu.com/s/1uLVyJrOKcHRFGNaPEBZ6KA提取码:rw5f这条博客只是给自己做个笔记,由于里面的方法提取的不够统一,不建议参照。。。。servlet代码UserService userService = new UserService(); public String selectStaff(HttpServletRe...
2019-08-02 18:16:36
137
原创 Mybatis逆向工程
修改好里面的数据库配置信息和你所要生成的pojo和mapper文件包的位置,再运行src里面一个default包里面的java文件就可以生成所需要的东西了。项目在下面这个链接里面链接:https://pan.baidu.com/s/11QQYPXCKo-J2KB7xrImBvw提取码:nrd7<?xml version="1.0" encoding="UTF-8"?><...
2019-04-24 18:46:51
147
原创 使用c3p0封装jdbc
即使写了DBUtil感觉还是对数据库的操作会有点麻烦,还是有一些操作是重复的,所以介绍一个传智播客弄出来的一个jdbc的封装,个人觉得简洁好用。导包:链接:c3p0-0.9.2-pre1 提取码:uwc3commons-dbutils-1.4提取码:aa7ritcast-tools-1.4.2提取码:6sxqmchange-commons-0.2提取码:its7 还有一个mysql驱动...
2019-04-23 21:33:34
324
2
原创 使用IO处理json数据
简单写一下付建生想出的json存数据还要io读取的作业。首先得知道什么是json,json是一种数据格式,其实就是一串字符串,但是这串字符串以特定的格式存放,代表一组数据。所以我我们首先把数据准备一下。data.txt{ "array": [ { "id":"1", "dep":"教学部", "zhuwu":"教学总监" }, { "id"...
2019-04-22 20:50:31
429
原创 Jdbc的简单增删改查(MYSQL)
Jdbc的简单增删改查(MYSQL)今天来写一篇简单的jdbc的增删改查的操作,如果还没学jdbc的同学可以看一看。个人认为jdbc的操作比文件简单多了,学会jdbc之后就不用受文件的苦了(反正我没用过文件,哈哈)。而且如果做出的项目的数据能够保存起来,这个项目的逼格立马高了起来啊。1、工具准备首先你需要导一个jar文件,如果你的mysql是5.7版本的,可以用我这个链接:https://...
2019-04-22 14:25:20
305
1
原创 io追加数据
FileWriter构造函数一个有两个参数,第二个参数改为true就是追加数据public void save(int uid,int pid,double value) throws Exception { BufferedWriter bw = new BufferedWriter(new FileWriter("src/data/testCF.txt", true)); Strin...
2019-04-16 19:09:00
188
原创 方格取数
设有N \times NN×N的方格图(N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00。如下图所示(见样例):A0 0 0 0 0 0 0 00 0 13 0 0 6 0 00 0 0 0 7 0 0 00 0 0 14 0 0 0 00 21 0 0 0 4 0 00 0 ...
2019-03-21 11:02:40
189
2
原创 过河卒
题目描述棋盘上AA点有一个过河卒,需要走到目标BB点。卒行走的规则:可以向下、或者向右。同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,AA点(0, 0)(0,0)、BB点(n, m)(n,m)(nn, mm为不超过2020的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从AA点能够到达BB点的路径的...
2019-03-20 20:48:47
148
原创 生命之树
在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, …, vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。在这个前提下,上帝要使得S中的点所对应的整数的和尽量大。这个最大的和就是上...
2019-03-20 18:47:01
201
原创 标记法判断数组结束
L1-049 天梯赛座位分配 (20 分)天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位参赛选手。令每校选手排成一列纵队,第 i+1 队的选手排在第 i 队选手之后。从第 1 所学校开始,各校的第 1 位队员顺次入座,然后是各校的第 2 位队员...
2019-03-19 23:19:13
566
原创 迪杰斯特拉
1003 Emergency (25 分)As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams ...
2019-03-19 15:00:01
510
原创 最长递增子序列
例如输入样例:389 207 155 300 299 170 158 65处理之后得:1 1 1 2 1 1 1 1代码: a[0] = 0; for(int i = 1;i <= n;i++){ for(int j = 0;j < i;j++){ if(a[i] > a[j]){ dp[i] = max(dp[i],dp[j] + 1); } ...
2019-03-17 22:55:52
94
原创 C++刷题秘籍
C++刷题秘籍在经过一个暑假的刷题过程中(只刷了pat乙级和洛谷新手村),总结了一下一些很有用的知识和函数,了解这些可以再刷题的时候避免自己写一大堆不必要的代码,在做题的时候节省时间。不同的函数也可以开阔自己的解题思路,从而更快想出最佳的解答方法。如果有在用C++进行刷题的小伙伴可以看看。不足的地方也希望大家能够指出来,一起学习一起进步。1、为什么用C++C++的好处在于它和C语言一样是比较...
2019-03-16 09:44:17
1797
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人