![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础知识
茂桑
热爱学习,现阶段跟随狂神一起学习,努力奋斗
展开
-
前后端分页查询好大的一个坑(已解决)
初步想法:本地DEBUG运行后台和页面,打断点尝试,进行重现时,SQL语句一模一样,就是有的条件能查到结果(第一页的查询结果的条件,当时没注意到),有的查不到(后面几页的查询结果做查询条件)当前页面在第一页时,pageIndex=1,你在这个页面,拿到查询出来的字段作为查询条件,传到后台的pageIndex也是1。==但是当页面在第5页时,你拿着第5页展示的字段,去直接作为查询条件查询时,传到后台的pageIndex=5!以第5页的查询结果,作为查询条件,放入搜索框进行查询,显示结果为空,查不到!原创 2023-03-02 17:32:08 · 682 阅读 · 1 评论 -
idea使用gradle编译不通过的解决办法之一
gradle版本低,可能造成项目无法编译,就是那种明明看着有jar,就是报找不到;各种刷新,重新引入jar包都没用,jdk卸载重装都没用,试试这个方法吧。使用idea自动选择gradle版本,勾选之后确认,然后编译就通过了。原创 2022-10-28 18:26:30 · 828 阅读 · 0 评论 -
Nginx快速入门
狂神-Nginx快速入门原创 2022-09-05 23:39:20 · 578 阅读 · 0 评论 -
连接工具和idea能查询出数据库数据,项目中查不到数据库数据:解决办法之一
代码,SQL语句一切都正常,用数据库连接工具,idea连接数据库都能查到,就是用代码查询,项目运行查询不到数据?原创 2022-08-08 16:41:16 · 1444 阅读 · 0 评论 -
java IO的使用
读取文件内容执行结果:文件的复制,把一个文件复制到另一个目录下原创 2022-06-20 21:52:50 · 100 阅读 · 0 评论 -
java Math.round()、Math.ceil()、Math.floor()取整方法的区别
Math.round() “四舍五入”,就看小数点后第一位的值小数点后第一位5小数点后第一位=5Math.ceil():(ceil:天花板)向上取整,及小数部分,直接不管,整数部分加1Math.floor():(floor:地板)向下取整,小数点后的,直接丢掉【注】 Math.floor()容易出现精度问题,举个最简单例子:对小数 8.54 保留两位小数(虽然它已经保留了 2 位小数):Math.floor(8.54*100)/100 // 输出结果为 8.53, 注意...原创 2022-06-20 17:55:17 · 487 阅读 · 0 评论 -
如何遍历List和Map
执行结果:另外三种遍历map的方法:原创 2022-06-18 15:35:57 · 196 阅读 · 0 评论 -
jvm内存模型和GC垃圾回收机制
jvm内存模型:如图所示,在jvm内存模型中栈区、本地方法栈、程序计数器是线程私有的,而方法区和堆区是线程公有的他们里面分别用来存储什么东西呢?栈区:虚拟机栈是线程私有的,每一个线程都会分配一个虚拟机栈,它描述的是Java方法执行的内存模型,每个方法执行时都会同步创建一个栈帧;用来存储方法的临时变量、数据,指令,返回地址等信息堆区:堆是这几块内存区域中最大的一块,存放的是Java中的对象实例,比如说 Person p = new Person();new出来的这个p其实是一个指针,在栈区,但是原创 2022-06-15 15:32:38 · 439 阅读 · 0 评论 -
线程池的创建
线程池的使用JDK 5.0起提供了线程池相关APl: ExecutorService和ExecutorsExecutorService:真正的线程池接口。常见子类ThreadPoolExecutorvoid execute(Runnable command)︰执行任务/命令,没有返回值,一般用来执行Runnable FuturesT> submit(Callable task):执行任务,有返回值,一般又来执 行Callablevoid shutdown()∶关闭连接池Executors:工具类原创 2022-06-12 17:26:04 · 55 阅读 · 0 评论 -
线程通信-生产者消费者问题
生产者消费者问题:1、假设仓库中只能存放一件产品,生产者将生产出来的产品放入仓库﹐消费者将仓库中产品取走消费.2、如果仓库中没有产品,则生产者将产品放入仓库,否则停止生产并等待﹐直到仓库中的产品被消费者取走为止.3、如果仓库中放有产品﹐则消费者可以将产品取走消费,否则停止消费并等待,直到仓库中再次放入产品为止.这是一个线程同步问题,生产者和消费者共享同一个资源(产品),并且生产者和消费者之间相互依赖,互为条件.对于生产者﹐没有生产产品之前,要通知消费者寺待﹒而生广J广加口,人需要马上通知消费者消费原创 2022-06-12 17:11:03 · 285 阅读 · 0 评论 -
jdk5.0新特性:显式的锁-lock锁
众所周知,synchronized是隐式锁,给方法或代码块加锁就可以实现线程同步,解决多线程并发不安全的问题;何为隐式锁?:出了作用域,会自动释放锁,不需要你声明什么时候把锁释放而从JDK 5.0开始,Java提供了更强大的线程同步机制——通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当java.util.concurrent.locks.Lock接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只能有一个线程对Lock对象加锁,线程开始访问共享资源之前应先获得L原创 2022-06-12 15:15:47 · 85 阅读 · 0 评论 -
什么是死锁?怎么解决?
多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。某一个同步块同时拥有“两个以上对象的锁”时,就可能会发生“死锁”的问题.线程A拿着一个x锁,要等线程B对象释放y锁;线程B拿着一个y锁,要等线程A对象释放x锁;而他们拿着的x,y锁又都不释放,一直僵持,就卡住锁死了,这就是死锁例子一:HR:我需要你有三年工作经验,才能招收你,给你这份工作;应聘者:我需要拿到这份工作并工作三年,才有三年工作经验,满足你的条件;现实中人是原创 2022-06-12 14:37:25 · 220 阅读 · 0 评论 -
线程不安全的集合与解决方法:synchronized同步方法、同步块
当我们使用多线程的时候,会出现线程不安全的问题,那我们要怎么解决这个问题呢?答案:线程同步方法,同步块在main方法里循环10000次,每次新生成一个线程,往一个ArrayList里添加这个线程的名次,理论上来说,list里面会有10000个线程的名字;可实际是这样吗?上代码执行结果:不加Thread.sleep(3000);1、99962、9995加了Thread.sleep(3000),避免是新建线程没跑完就main就结束打印结果:1、100002、99983、9999从结果可以看原创 2022-06-09 22:05:19 · 214 阅读 · 0 评论 -
并发、线程同步、队列、锁
并发:多个线程对同一个对象进行同时操作线程同步:处理多线程问题时﹐多个线程访问同一个对象﹐并且某些线程还想修改这个对象.这时候我们就需要线程同步.线程同步其实就是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面线程使用完毕,下一个线程再使用锁:要保证安全,光有队列还不够,还需要锁的机制。锁很好理解,就是给那个对象上一把锁,等上一个线程使用完,释放锁,下一个线程才可以进去再加锁,对对象进行操作,使用完再释放锁。。。。锁的机制会降低性能“一百个人要上厕所,只有一个厕所,要保证原创 2022-06-09 21:06:10 · 347 阅读 · 0 评论 -
守护线程与用户线程
1、线程分为用户线程和守护线程2、虚拟机必须确保用户线程执行完毕3、虚拟机不用等待守护线程执行完毕4、如,后台记录操作日志,监控内存,垃圾回收等待…举个栗子:上帝保佑着你,上帝是守护线程,你是用户线程;你GG了,上帝还在。看代码:执行结果:你G了,你这个线程停止之后,上帝线程还在运行,直至jvm也停止运行所以上帝这个守护线程,虚拟机是不管的;上帝还跑了一段,是因为虚拟机停止也要点时间...原创 2022-06-09 20:28:29 · 64 阅读 · 0 评论 -
线程设置优先级-给CPU提建议,CPU可以不听
在线程里面有个概念,叫做优先级priority可以给线程设置优先级,1-10;数字越大,优先级越高但是:你以为优先级高的一定会优先执行吗?NONONO设置优先级按优先级执行,只是给CPU提建议,CPU听不听,看他心情看代码:执行结果,箭头后的数字是优先级,上下顺序表示执行顺序:从结果可以看出:并不严格按照优先级执行线程,但是隐约也有趋势,优先级高的先执行...原创 2022-06-09 20:09:28 · 748 阅读 · 0 评论 -
线程的状态
1、线程有5种状态:新建(new Thread)、就绪(runnable),运行(running)、阻塞(blocked)、结束(dead)主要方法:setPriority:更改优先级sleep(休眠):休眠多少毫秒;每个对象都有一把锁,sleep不会释放锁join(加入):插队,当有新的线程加入时,主线程会进入等待状态,一直到调用join()方法的线程执行结束为止。yield(礼让):线程A抢到CPU了,线程B在外面等待,这是线程A调用yield()方法,就会退出来和线程B一起再抢一次注:原创 2022-06-09 19:47:39 · 9551 阅读 · 0 评论 -
Thread类-线程静态代理实现
先说一个小例子:你要准备结婚,举办婚礼,需要找婚庆公司,因为不可能一场婚礼的所有事情都由你来做:婚庆公司布置场景,请司仪,写请帖…而你,作为新人,只需要去参加婚礼,说表白词,誓言…婚庆公司是代理对象,你是真实对象,婚庆公司代理你话不多说,上代码婚庆公司和你都实现同一个接口-Marry接口,婚庆公司代理真实对象(实现Marry接口的类),这样只要实现Marry接口,都可以交给婚庆公司代理,而你可以专注做自己的事情,各做各的而线程也是一样:Thread类实现Runnable接口,你自定义的线程类也实原创 2022-06-09 16:09:05 · 138 阅读 · 0 评论 -
lambda表达式:简化代码
函数式接口Functional Interface是学习java8函数式编程的关键所在简化方式丧心病狂,没学过的根本看不懂的1、函数式接口的定义:一个任意的接口,接口中只含有一个抽象方法(),那它就是一个函数式接口。比如:2、对于函数式接口,我们可以使用lambda表达式来创建改接口的对象lambda小测试一,代码是怎么一步步简化的:输出结果:lambda小测试二,当函数式接口的那个抽象方法带参数,该怎么写:测试结果:/** * 1、如果方法实现体有多行代码,则不能省原创 2022-06-08 16:00:13 · 143 阅读 · 0 评论 -
创建线程的第三种方法-实现Callable接口
与其他两种方式(继承Thread类和实现Runnable接口)略有不同:实现Callable接口,重写里面的call方法,并且还要返回值。代码如下注:需要导入commons-io-2.4.jar包,使用里面的文件下载器,才可以使用里面的包,实现下载文件哦,具体方法:1、直接百度搜commons-io下载2、用我的下载地址link,提取码:11113、另一个直接下载地址(可能会失效):link...............原创 2022-06-07 23:19:07 · 183 阅读 · 0 评论 -
多线程小测试-龟兔赛跑
兔子与乌龟两个线程同时进行,兔子每10步“睡觉”1毫秒执行结果:乌龟跑了很远,兔子才开始跑原创 2022-06-07 22:30:55 · 119 阅读 · 0 评论 -
并发问题:多线程抢火车票
当多个线程同时对一个资源进行访问的时候,就会出现以下问题:执行结果:可以看到,第9张票,第2张票,同时被多个人拿到这与现实情况矛盾,所以在多线程同时访问同一个资源时,会出现问题,所以需要对应的解决办法:加上锁解决并发问题执行结果:这只是很简单的一个加锁的应用,此文章只是介绍多线程出现的问题,想知道更多解决方法,后会有期...原创 2022-06-07 18:42:04 · 957 阅读 · 0 评论 -
线程小练习-图片下载
多线程小测试原创 2022-06-07 16:58:33 · 64 阅读 · 0 评论 -
线程的概念与创建
线程的概念原创 2022-06-07 15:24:26 · 112 阅读 · 0 评论 -
java抽象类和接口的区别
相同:1.不能够实例化2.可以将抽象类和接口类型作为引用类型3.一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类语法上的不同:抽象类:1.抽象类中可以定义构造器2.可以有抽象方法和具体方法3.抽象类中的成员可以是 private、默认、protected、public4.抽象类中可以定义成员变量5.有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法6.抽象类中可以包含静态方法7.一个类只能继承一个抽象类接口:1.接口中原创 2022-06-04 21:43:09 · 65 阅读 · 0 评论 -
ArrayList和LinkedList的区别
ArrayList和LinkedList都实现了List接口,他们有以下的不同点:ArrayList是基于索引的数据接口,它的底层是数组。它可以以O(1)时间复杂度对元素进行随机访问。与此对应,LinkedList是以元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素链接在一起,在这种情况下,查找某个元素的时间复杂度是O(n)。相对于ArrayList,LinkedList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算大小或者是更新索引。L原创 2022-06-04 20:41:14 · 538 阅读 · 0 评论 -
json格式转成Java对象
FastJson对于JSON格式字符串、JSON对象及JavaBean之间的相互转换 - 你是风儿 - 博客园转载 2022-04-06 19:14:16 · 749 阅读 · 0 评论 -
java.lang.NoClassDefFoundError报错怎么解决?
能编译,但在运行时报这个错误,另一个模块的类不可用去File->Project Structure找到Modules里你出错的模块,找到他所找不到的那个模块的依赖把provided "提供“ 改成 compile "编译"接下来,编译通过...原创 2022-03-11 14:23:52 · 1077 阅读 · 0 评论 -
类的加载顺序
类的加载顺序。(1) 父类静态对象和静态代码块(2) 子类静态对象和静态代码块(3) 父类非静态对象和非静态代码块(4) 父类构造函数(5) 子类 非静态对象和非静态代码块(6) 子类构造函数静态代码块只在jvm运行时执行一次,只执行一次!!!非静态代码块在类被实例化的时候执行例子:以下代码执行后输出结果为:public class Test{public static Test t1 =new Test();{...原创 2021-07-27 17:25:18 · 89 阅读 · 0 评论 -
常见排序方式:冒泡、选择、插入、希尔、快速、归并,基数
冒泡排序1.优点:比较简单,空间复杂度较低,是稳定的; 2.缺点:时间复杂度太高,效率慢;冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端。选择排序 缺点:比较次数多;不稳定。选择排序(Select...原创 2021-07-24 11:59:18 · 322 阅读 · 0 评论 -
关于方法重写的简要
重写关键:父类方法与子类方法之间:外壳不变,核心重写重写规则 : 两同两小一大两同:方法名、参数类型相同(返回值类型可以不同);两小:子类返回类型小于等于父类方法返回类型,子类抛出异常小于等于父类方法抛出异常(子类抛出的异常必须是父类同样的异常或父类的子类);一大:子类访问权限大于等于父类方法访问权限;(如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected)。构造方法不能被重写。声明为 final 的方法不能被重写。声...转载 2021-07-23 23:39:35 · 138 阅读 · 0 评论