- 博客(117)
- 收藏
- 关注
原创 单例设计模式之懒汉式以及线程安全问题
基础懒汉式:多线程下不安全,需改进。同步方法:简单但性能差,不推荐高并发场景。双重检查锁:性能优,需配合volatile。静态内部类:推荐方案,兼顾安全与性能。枚举:最佳实践,支持防反射和反序列化。
2025-04-26 18:05:05
828
原创 Servlet对象的生命周期
WEB容器创建的Servlet对象,这些Servlet对象都会被放到一个集合当中(HashMap),只有放到这个HashMap集合中的Servlet才能够被WEB容器管理,自己new的Servlet对象不会被WEB容器管理。用户没有发送请求之前,如果提前创建出来所有的Servlet对象,必然是耗费内存的,并且创建出来的Servlet如果一直没有用户访问,显然这个Servlet对象是一个废物,没必要先创建。思考:Servlet的无参数构造方法是在对象第一次创建的时候执行,并且只执行一次。
2025-04-12 10:54:08
466
原创 MySQL快速入门
数据库是一个以某种有组织的方式存储在硬盘上数据集合;idname(名称)age(年龄)1mayikt232meite283zhangsan184lisi19数据库应用场景 以后开发JavaWeb项目 背后的数据都是存放在数据库(互联网)中。简介:1.MySQL数据库管理系统由瑞典的DataKonsultAB公司研发,该公司被Sun公司收购,现在Sun公司又被Oracle公司收购,因此MySQL目前属于 Oracle 旗下产品。
2025-04-10 16:08:06
817
原创 关于WEB服务器软件
tomcat还有另外一个名字:catalina(catalina是美国的一个岛屿,风景秀丽,据说作者是在这个风景秀丽的小岛上开发了一个轻量级的WEB服务器,体积小,运行速度快,因此tomcat又被称为catalina)tomcat的logo是一只公猫(寓意表示Tomcat服务器是轻巧的,小巧的,果然,体积小,运行速度快,只实现了Servlet+JSP规范)lib :这个目录是Tomcat服务器的核心程序目录,因为Tomcat服务器是Java语言编写的,这里的jar包里面都是class文件。
2025-04-09 13:20:12
620
原创 B/S结构的系统通信原理
第四步:定位110.242.68.3这台主机上的服务器软件,因为是80端口,可以很轻松的定位到80端口对应的服务器软件。第六步:服务器软件找到index.html文件,并且将index.html文件中的内容直接输出响应到浏览器上。在浏览器地址栏上输入域名,回车之后,域名解析器会将域名解析出来一个具体的IP地址和端口号等。A计算机要想和B计算机通信,首先你需要知道B计算机的IP地址,有了IP地址才能建立连接。一个端口代表一个软件(一个端口代表一个应用,一个端口仅代表一个服务)。一个WEB系统的通信原理?
2025-04-09 13:17:41
249
原创 什么是系统架构
安全(因为大量的数据是集成在客户端软件当中的,并且客户端有很多个,服务器虽然只有一个,就算服务器那边地震了,火灾了,服务器受损了,问题也不大,因为大量的数据在多个客户端上有缓存,有存储,所以从这个方面来说,C/S结构的系统比较安全。速度慢(不是因为带宽低的问题,是因为所有的数据都是在服务器上,用户发送的每一个请求都是需要服务器全身心的响应数据,所以B/S结构的系统在网络中传送的数据量比较大。速度快(软件中的数据大部分都是集成到客户端软件当中的,很少量的数据从服务器端传送过来,所以C/S结构的系统速度快)
2025-04-09 13:17:06
440
原创 mp中的乐观锁
创建一个包config,包中创建一个配置类 MpConfig,添加Configuration注解,把启动类中的mapperScan注解也可移到配置类中来。执行更新时, set version = newVersion where version = oldVersion。(2) 对应实体类添加version字段,即版本号属性,在实体类版本号属性添加注解。(1)数据库表中添加version字段,作为乐观锁版本号。当要更新一条记录的时候,希望这条记录没有被别人更新。更新时,带上这个version。
2024-01-19 11:44:18
581
原创 线程通信wait()、notify()
一、线程通信(线程交互):当多个线程完成某些特定任务的时候,线程之间有时也需要一定的通信,即线程通信例如:模拟银行账户,用户A不断往该账户中存钱,最多存储10000元,若账户己满,需要通知用户B取钱用户B不断从该账户中取钱,若余额不足时,需要通知用户A存钱使用两个线程打印1-100,线程1、线程2 交替打印二、在java.Long.Object类中【等待唤醒机制】wait():使当前"同步监视器"上的线程进入等待状态,同时释放锁notify()/notifyAll():唤醒当前"同步监视器
2023-01-17 20:13:20
274
原创 线 程 同 步、线程的死锁问题
线程同步:模拟售票程序出现问题: 当多个线程同时访问共享数据时,产生无序、重复、超额售票等多线程安全问题解决:将多个线程需要访问的共享数据,包装起来视为一个整体,确保一次只有一个线程执行流访问共享数据Java为上述问题提供了相应的解决办法: 1、同步代码块 synchronized(同步监视器){ //多个线程需要访问的共享数据 } 同步监视器:俗称“锁” ,可以使用任意类型的对象充当。但是必
2023-01-17 16:08:04
872
原创 线程的优先级
线程的优先级(1-10):默认的优先级为:5;优先级高并不意味着线程一定会优先执行,优先级高可以更高概率的获取cpu的资源setPriority():设置线程优先级getPriority():获取线程优先级MAX_PRIORITY : 10MIN_PRIORITY : 1NORM_PRIORITY :5
2023-01-15 21:45:27
548
原创 线程的控制
线程的控制sleep(Long millis):使当前线程进入睡眠状态(是一个静态方法)join() / join(Long millis):是当前线程进入阻塞状态(是一个实例方法)interrupt():中断阻塞状态的线程isAlive():判断当前线程是否处于存活状态yield():线程让步
2023-01-15 20:18:15
297
原创 结束线程---使用通知的方式
结束线程:采用通知的方式,通常在线程执行体中写一些持续执行的语句,比如说循环,因此,控制住循环,就可以控制住当前的线程在main方法中创建并后动两个线程·第一个线程循环随机打印1oo以内的整数﹐直到第二个线程从键盘读取了Q命令·
2023-01-15 18:48:24
306
原创 多线程---创建执行线程的方式之二
一、创建执行线程的方式二:①声明一个类实现Runnable 接口②实现接口中的run()方法,同时编写线程执行体③创建该实现类的实例④创建Thread类的实例⑤将实现类的实例作为参数传递给Thread的构造器⑥调用Thread的start()方法启动线程,默认调用run()方法二、创建执行线程的两种方式的区别?①实现Runnable接口的方式解决了Java中单继承的局限性②若多个线程需要访问共享数据时,首选使用 实现Runnable接口的方式
2023-01-14 12:11:35
102
原创 多线程原理及创建方式之一
一、进程:为了完成某项特定的任务,使用某种语言,编写一组指令的集合进程:正在进行中的程序线程:在一个进程中,执行的一套功能流程,称为线程 在一个进程中,执行的多套功能流程,成为多线程二、为什么使用多线程?抢占式策略系统:系统会为每个执行任务的线程分配一个很小的时间段﹐当该时间段用完后﹐系统会强制剥夺其 cpu 的执行权交给其他线程完成任务1、提高效率:尽可能的利用cpu的资源2、增强用户体验JVM:多线程main方法称为主线程三、线程的常用方法currentThread
2023-01-14 10:34:05
100
原创 java.io.File类
file1.renameTo(file2):file1必须存在,file2必须不存在。如果目录里面有文件删除目录返回false,没有则返回true。该方法获取的是该目录中所有的文件和目录的列表名(名称)renameTo(File newName):重命名。若hello.txt不存在则返回false。若删除的是目录,则需要将目录中所有的内容清空。mkdirs:不管存不存在,直接创建目录。若两个路径都存在也返回false。前提是所见目录的上级目录存在。获取该目录下文件的对象。
2023-01-10 00:14:02
372
原创 对象的序列化
对象流:ObjectInputStream & ObjectOutputStream1、对象的序列化:将内存中的对象永久的以二进制形式保存到磁盘中①创建节点流对象②(可选)创建缓冲流包装对应节点流,用于提高效率③创建对象流包装对应的缓冲流,用于完成序列化④通过writeXxx()方法完成序列化⑤需要序列化对象的类必须实现java.io.Serializable接口⑥提供序列号private static final Long SerialVersionUID=(long型的id)L;2、
2023-01-07 23:56:21
331
原创 IO流、文本文件和非文本文件的读、写、复制
②:按数据类型不同:字节流、字符流(字符流用于操作文本文件:txt .java)(字节流用于操作非文本文件 .avi .jpg .mp3)①:按流向不同:输入流、输出流(以程序为主体)抽象基类 节点流。③:按角色不同:节点流、处理流。二、IO流的体系结构。
2023-01-05 20:56:42
185
原创 Collections工具类
操作集合的工具类:CollectionsEnumeration:(了解)古老的集合和古老的迭代器。Vector:是一个古老的实现,是线程安全的,因此效率低。操作集合的工具类:Collections。junit4默认不接收键盘输入。
2023-01-03 22:07:54
84
原创 遍历Map的三种方式
Map的遍历方式一、获取Map中所有的key组成的set;需用到的方法:keySet()方法Map的遍历方式二、获取Map中所有的value组成的Collection;需用到的方法:values()方法Map的遍历方式三、获取Map中所有的Entry(是Map的内部类,一个Entry对应着一个key和一个value)组成的Set ;用到的方法:entrySet()
2023-01-03 10:34:21
279
原创 集合的遍历
1、增强for循环 for(被遍历集合中元素的数据类型 变量名 : 被遍历的集合){ }2、使用Iterator迭代器①、获取当前集合的迭代器②、通过hasNext()、next()方法配合遍历集合
2023-01-01 16:12:52
94
原创 Comparator定制排序
【代码】Comparator定制排序。Comparator:定制排序 ①声明一个类实现Comparator接口 ②实现接口中的抽象方法compare(Object o1,Object o2) ③将该实现类的实例作为参数传递给TreeSet的构造器
2022-12-30 23:23:26
230
原创 TreeSet
①需要添加到TreeSet 集合中对象的类,实现Comparable接口。②实现接口中的抽象方法compareTo(Object o)>Comparable:自然排序。TreeSet:拥有指定的排序方式。
2022-12-30 23:08:55
109
原创 LinkedHashSet
LinkedHashSet:是HashSet的子类,相似于HashSet多了链表维护元素的顺序,遍历效率高于HashSet 增删效率低于HashSet
2022-12-30 22:30:06
198
原创 List常用方法
Object set(int index, Object ele):将index索引位置的元素修改为ele。>int indexOf(Object obj):查找某个元素的索引位置,找到返回索引值,找不到返回-1。>void add(int index, Object ele):在index索引位置添加元素ele。>Object remove(int index):删除指定索引位置的元素。>Object get(int index):获取指定索引位置的对象。
2022-12-29 22:50:56
136
原创 hibernate中错误解决
-----------------------------------已解决--------------------------分割线----------------------------------------否则在运行时,会报出“xxxx doesn't have a default value”的错误。在进行Junit测试时,eclipse没有在数据库创建表格。所以报出表不存在的问题。最重要的是在数据库中的主键,要有设置成“自动递增”的一项。完成数据库的表创建后,进行JUnit测试,成功。
2022-11-16 00:35:50
344
原创 制造异常对象:throw
(5)nterger类的static方法parselInt(String s)将s转换成对应的int值。(若继承的是RuntimeException,则该异常为运行时异常,若继承的是Exception,则该异常为编译时异常)(1)在主类(EcmDef)中定义异常方法(ecm)完成两数相除功能。(3)在程序中,自定义对应输入负数的异常类(EcDef)。(2)在main()方法中使用异常处理语句进行异常处理。输入负数(EcDef自定义的异常)进行异常处理。①声明一个类继承一个异常类。
2022-09-04 22:17:55
463
原创 处理异常的方式之二:throws
throws是异常的处理方式之一,只不过处理的方式是将异常抛出,交给调用者做具体的处理。【补充】:子类重写方法抛出的异常类型范围不能大于父类被重写方法异常类型的范围。throws是异常的处理方式之一,使用在方法的声明处,后面跟异常的类型。异常的处理方式之一:throws。
2022-09-04 18:23:45
364
原创 异常的处理
--运行时异常(非受检异常unchecked):有时可以保证程序的正常运行,一旦发生异常,会在该代码处生成一个异常对象。/--编译时异常(受检异常 checked):编译时对其进行检查,若不处理,编译不能通过。会在该代码处生成一个异常对象,以堆栈形式抛出,若不对其处理,最终会导致程序终止。抛:一旦某句代码发生异常,会在该代码处生成一个异常对象,然后堆栈式抛出。抛:一旦某句代码发生异常,会在该代码处生成一个异常对象,然后堆栈式抛出。Java中的异常都是以对象的形式存在,一旦某句代码发生异常,
2022-09-04 14:43:56
298
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人