
初学java
文章平均质量分 84
lambo mercy
无限进步
展开
-
Servlet API 详解
服务器方法执行完,Tomcat会自动把HttpServletResponse我们设置的对象转换成一个HTTP协议的字符串,通过Socket将该响应发出去,层层封装最后浏览器获取到HTTP响应,浏览器的Socket读到该响应,按照HTTP响应的格式来解析该响应,并把body中的数据按照一定的格式显示出来。这个代码的执行流程和form表单传参是类似的,只不过是传输的数据格式是不同的,但是当前通过Json传输数据时,服务器只是把整个body读出来了,并没有按照键值对的方式来处理。相应又是如何返回给浏览器的?原创 2023-04-15 09:24:51 · 1020 阅读 · 0 评论 -
网络编程套接字 socket 之 UDP
我们网络编程的核心:,操作系统为我们应用程序提供的API,我们的Socket是和传输层密切相关的。Socket API 套接字,翻译是插座我们传输层为我们提供了两个最核心的协议UDP/TCP,因此Socket API也为我们提供了两种风格TCP/UDP。(有第三种unix早就没人用了)简单认识一下TCP/UDP:TCP 有连接 可靠传输 面向字节流 全双工UDP 无连接 不可靠传输 面向数据报 全双工有链接/无连接:打电话就是有连接的,需要连接建立了才能通信,连接建立需要双方来接受。原创 2023-03-21 10:58:37 · 894 阅读 · 0 评论 -
初识网络原理
远古时期,计算机之间是相互独立的。随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成 业务,就有了网络互连。网络互连:将多台计算机连接在一起,完成数据共享。数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以划分为局域网和广域网。原创 2023-02-11 14:23:22 · 225 阅读 · 0 评论 -
Java中的 文件操作 和 IO
在本篇博客中,将主要介绍 的是文件的概念、文件的路径、Java中 文件系统的操作(主要介绍 File类 的各种属性与方法)~原创 2023-02-07 14:05:45 · 314 阅读 · 0 评论 -
锁的优化、JUC的常用类、线程安全的集合类
这篇博客主要介绍 synchronized 的底层工作原理,包括:锁膨胀/锁升级、锁消除、锁粗化;并且介绍了 关于JUC的详细知识点;以及一些线程安全的集合类 ~下面,正文开始 ......原创 2023-02-04 23:42:25 · 164 阅读 · 0 评论 -
常见的锁策略、CAS及它的ABA问题
前面所介绍的 多线程基础篇的内容,主要介绍的还是一些 和多线程相关性非常高的内容,也都是工作中经常会涉及到的问题和代码~而接下来的多线程进阶篇的内容,则是需要对多线程内容进行进一步的补充~进阶篇中的很多知识,不再是工作中常用的,但是却是在面试中常考的(俗称:八股文,面试造核弹,工作拧螺丝)~下面,就正式开始来学习 进阶篇的内容 ......ABA问题可以单纯的这样理解:如果你去买一个手机,那么你无法区分 它是一个新机,还是一个翻新机(二手的、外面包装和新机一样)~原创 2023-02-04 22:01:17 · 952 阅读 · 1 评论 -
多线程 __ 线程池
线程池和字符串常量池、数据库连接池一样,都是为了提高程序的效率~其解决问题的思路,就是把线程创建好了以后,放到池子里,当我们需要使用线程的时候,就可以直接从池子里取,而不是通过系统来创建;当线程用完了,就还到池子里,而不是通过系统来销毁线程~从池里获取、还给池的操作要比创建/销毁更高效~因此,上述操作 降低了创建/销毁线程的开销,又能够进一步提高效率了~此时,就出现了一个关键问题:为什么把线程放到池子里,从池子里取线程就要比从系统这里创建线程 更高效呢?原因是从池子里去取 是纯用户态。原创 2023-02-04 00:09:17 · 117 阅读 · 0 评论 -
多线程案例 __ 定时器
定时器,又称 任务定时执行器~即:到了一定的时间,就会去执行指定的任务~在 Java标准库中,提供了一个带有定时器功能的Timer类,Timer类 的核心方法是schedule方法schedule方法 包含了两个参数,第一个参数为 即将要执行的任务代码TimerTask,第二个参数为 指定多长时间后执行地一个参数中的代码(单位是 毫秒)~@Override}, 3000);原创 2023-02-03 13:54:13 · 217 阅读 · 0 评论 -
多线程案例__阻塞队列_生产者消费者模型
队列为空,要阻塞,当队列不空的时候 就唤醒队列为满,要阻塞。当队列不满的时候 就唤醒在入队列时,发现队列满了就需要阻塞等待wait,等取走元素后才可以唤醒notify在出队列时,发现队列空了就需要阻塞等待wait,等插入元素后才可以唤醒notify注意:虽然按照上述的代码,发现唤醒的时候,一定是有元素插入成功了,所以条件不成立,等待确实是要结束了~但是,更稳妥的办法,是 在唤醒之后,再判断一次(万一条件又成立了呢)!!!原创 2023-02-02 22:53:14 · 244 阅读 · 0 评论 -
单例模式【JavaEE初阶】
单例模式是一种常见的设计模式 。单例模式希望:有些对象,在一个程序中应该只有唯一一个实例,就可以使用单例模式 。换句话说,在单例模式下,对象的实例化被限制了,只能创建一个,多了也创建不了 在 Java 里面的单例模式,有很多种实现方式,在这里主要介绍两个大类:饿汉模式、懒汉模式 饿汉模式 和 懒汉模式 两种模式,描述了创建实例的时间。 所以说,如果是 饿汉模式,那么显示所需要的时间就会比较多;如果是 懒汉模式,那么显示的时间就会比较低,效率就会比较高(也有可能 用户打开文件以后,只看了两眼就关原创 2022-12-02 21:55:12 · 796 阅读 · 2 评论 -
死锁问题【javaEE初阶】
所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。因此我们举个例子来描述,如果此时有一个线程A,按照先锁a再获得锁b的的顺序获得锁,而在此同时又有另外一个线程B,按照先锁b再锁a的顺序获得锁。原创 2022-12-01 23:02:06 · 743 阅读 · 0 评论 -
多线程 _ 基础篇 _ 线程安全问题【JavaEE初阶】
线程安全问题 出现的 "罪魁祸首",正是 调度器的 随机调度 / 抢占式执行 这个过程在随机调度之下,多线程程序执行的时候, 有无数种可能的排列方式在这些排列顺序中,有的排列方式 逻辑是正确的,但是有的排列方式 可能会引出 bug对于多线程并发时,会使程序出现 bug 的代码 称作线程不安全的代码,这就是线程安全问题。原创 2022-11-28 21:20:50 · 346 阅读 · 0 评论 -
Thread的使用、线程的几个重要操作和状态【JavaEE初阶】
但是 Java中 为了让程序猿 调试的时候方便理解,这个线程是谁,就在 JVM 里给对应的 Thread对象 加了个名字(JVM中的 Thread对象 和 操作系统内核里面的线程 一一对应)线程也分成 前台线程 和 后台线程(这个是可以自己来设置的),创建线程出来默认为是 前台线程,前台线程 会阻止进程结束;更通用的方法是,使用 Thread.currentThread() ,currentThread() 是一个静态方法,其特点是 哪个线程来调用这个方法,得到的线程就是哪个实例。原创 2022-11-28 19:31:58 · 712 阅读 · 0 评论 -
线程的概念和创建【javaee初阶】
注意:在谈到多进程的时候,会经常谈到 "父进程" 和 "子进程",如果在 A进程 里面创建了 B进程,那么A 是 B 的父进程,B 是 A 的子进程。红色框里面的内容,创建了一个匿名内部类(没有名字),这个匿名内部类是 Thread 的子类,同时前面的 new 关键字,就会给这个匿名内部类创建出了一个实例。当然,此时是看不到 Java线程的,需要借助其他的工具。虽然 可以在这里运行了许多次,先打印出来的是"hello main",但是顺序仍然是不可确定的,大概率是受到了创建线程自身的开销影响的~原创 2022-11-28 18:05:46 · 621 阅读 · 0 评论 -
进程【JavaEE初阶】
本质问题:当前计算机 CPU 能力是有限的,但是进程的数量却比较多,每个进程都需要消耗一定的 CPU资源, 操作系统要做到尽可能的公平,这时候就需要进行 "调度"。类似于高铁站的 "调度"工作,铁轨就只有几根,但是每天在上面跑的高铁 确实有许多的,那么 "调度" 就是要规划好 高铁什么时候开,从哪条铁轨上开,从哪里开到哪里......"调度"工作就是需要保证 这些高铁之间需要有条不紊的开,相互之间不可以打架~~这里的解决方法,就是 "原创 2022-11-26 17:37:01 · 619 阅读 · 0 评论 -
java基础--字符串常量池(String Table)
1、常量池在java用于保存在编译期已确定的,已编译的class文件中的一份数据。它包括了关于类,方法,接口等中的常量,也包括字符串常量,如String s = "java"这种申明方式;当然也可扩充,执行器执行器产生的常量也会放入常量池,故认为常量池是JVM的一块特殊的内存空间。2、因为在Java中创建一个对象是一个很重的活,并且需要不断进行垃圾回收,所以像是String Table这样的缓冲池可以有效缓解这些问题。(很多包装类都有缓冲空间,Integer 默认缓存 -128 ~ 127 区间的值,Lo原创 2022-09-22 23:05:40 · 618 阅读 · 0 评论 -
String、StringBuilder、StringBuffer
三者中StringBuilder执行速度最佳,StringBuffer次之,String的执行速度最慢(String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,String对象一旦创建后该对象是不可更改的,后两者的对象是变量是可以更改的)通过这种方式来将String对象跟引用绑定的话,JVM执行引擎会先在运行时常量池查找是否存在相同的字面常量,如果存在,则直接将引用指向已经存在的字面常量;因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。原创 2022-09-22 21:53:12 · 432 阅读 · 0 评论 -
Java异常处理机制
异常发生之后,如果我选择了上抛,抛给了我的调用者,调用者需要对这个异常继续处理,那么调用者处理这个异常同样有两种处理方式。所有异常都是在运行阶段发生的,因为只有程序运行阶段才可以new对象,因为异常的发生就是 new异常对象。:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError和OutOfMemoryError,一旦发生回力乏术。1、catch后面的小括号中的类型可以是 具体的异常类型,也可以是该异常类型的 父类型。原创 2022-09-22 17:45:22 · 151 阅读 · 0 评论 -
String 类的基本用法及String 类的常见操作
1)使用常量串2)直接使用new String对象3)利用字符数组。原创 2022-09-22 09:46:25 · 980 阅读 · 0 评论 -
【JavaSE】经典项目 图书管理系统
项目简介:该项目为图书管理系统,实现用户的区分,包括管理员和普通用户,管理员的行为包括:添加图书,删除图书,查找图书,显示图书和退出程序等,普通用户的用法包括:查找图书,借阅图书,归还图书和退出程序。思路简介:利用类,对象,抽象类,接口,继承,封装和多态及组合等知识,将对象提取出来,对象----用户和书,用户可以分为管理员和普通用户,所以设置一个抽象类User,管理员和普通用户继承该抽象类,由于书还要包括书架,所以书和书架分两个类,为了实现对应的操作,并且是操作的方法一致,所以要构造一个操作的接口原创 2022-09-19 19:11:00 · 545 阅读 · 1 评论 -
【Java SE】面向对象三大特性之多态
向上转型:实际就是创建一个子类对象,将其当成父类对象来使用。语法格式:父类类型 对象名 = new 子类类型()//支付宝父类引用子类,因为是小范围到大范围,所以可以实现向上转型向上转型的优点:让代码实现更简单灵活。向上转型的缺陷:不能调用到子类特有的方法。有向上转型肯定会有向下转型啦!向上转型会导致无法调用子类特有的方法,但是有时候可能需要调用子类特有的方法,此时:将父类引用再还原为子类对象即可,即向下转换。}@Override。原创 2022-09-19 16:32:21 · 171 阅读 · 0 评论 -
【Java SE】抽象类和接口
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,即接口中的方法必须全部是抽象方法。(jdk1.8前)原创 2022-09-19 13:05:52 · 394 阅读 · 0 评论 -
【Java SE】重写和重载的区别
1.重载是一个类中多态性的一种表现2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。原创 2022-09-19 12:14:32 · 192 阅读 · 0 评论 -
【Java SE】面向对象三大特性之继承
继承(inheritance)机制:是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在,,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。继承主要解决的问题是:共性的抽取,实现代码复用。例如:狗和猫都是动物,那么我们就可以将共性的内容进行抽取,然后采用继承的思想来达到共用。在猫和狗中含有相同的字段和行为,同时也可能含有不同的字段和行为,所以我们可以,然后让猫和狗来继承相同的部分:那能否将这些共性抽取呢?原创 2022-09-18 22:57:09 · 112 阅读 · 0 评论 -
【Java SE】内部类和对象的打印问题
在 Java 中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。注意:1、定义在 class 类名{ }花括号 外部的,即使是在一个文件里,都不能称为内部类2、内部类和外部类共用同一个java源文件,但是经过编译之后,内部类会形成单独的字节码文件。原创 2022-09-18 22:09:46 · 212 阅读 · 0 评论 -
【Java SE】static成员及代码块
在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。原创 2022-09-18 17:42:22 · 125 阅读 · 0 评论 -
【Java SE】封装,面向对象三大特性之一
1. 在 IDEA 中先新建一个包: 右键 src -> new -> package2. 在弹出的对话框中输入包名, 例如TestDemo33. 在包中创建类, 右键包名 ->new-> Java Class, 然后输入类名即可。4. 此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了。5. 同时我们也看到了, 在新创建的 Test.java 文件的最上方, 就出现了一个 package 语句。原创 2022-09-18 17:08:35 · 277 阅读 · 0 评论 -
【JavaSE基础】对象的构造及初始化
在本章节中介绍了对象的初始化和构造方法。要点:1、构造方法的本质:当我们实例化一个对象的时侯,一定会进行两步操作:(1)为对象分配内存 (2)调用合适的构造方法。2、构造方法是一个没有返回值,类名相同,参数列表不同的多个方法。3、当写一个类时,编译器会帮我们默认生成一个不带参数的构造方法;但只要我们用户自己定义了一个构造方法,编译器就不会再默认生成一个。(一个类中至少会有一个构造方法,即使用户没有定义)。原创 2022-09-18 00:33:52 · 1546 阅读 · 0 评论 -
【Java SE】this详解
首先,this关键字 用来访问本类的成员方法this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作都是通过this引用去访问。原创 2022-09-17 23:36:55 · 277 阅读 · 0 评论 -
【Java SE】面向对象、类和对象详解
面向对象: Java是一门纯面向对象的语言(Object Oriented Program,继承OOP),在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象与对象之间的交互完成一件事情。类,使用关键字class完成。class 类名称 {属性 (变量);行为 (方法);}范例:定义一个Person类class Person { // 类名要 大驼峰//姓名int age;//年龄public void print() { //方法。原创 2022-09-17 22:51:28 · 675 阅读 · 0 评论 -
float型和double型的区别
float型和double型的区别原创 2022-09-15 14:29:10 · 10884 阅读 · 0 评论 -
标识符、关键字、数据类型(java基础)
标识符、关键字、数据类型(java基础)原创 2022-09-15 14:04:52 · 398 阅读 · 0 评论 -
Java安装
Java开发环境配置原创 2022-08-08 13:40:33 · 1192 阅读 · 1 评论 -
【Java SE】Java语言简介 、语言优势、与C/C++区别
【Java SE】Java语言简介 、语言优势、与C/C++区别原创 2022-08-08 13:03:36 · 273 阅读 · 0 评论