- 博客(78)
- 收藏
- 关注
原创 实现元素定位:掌握Selenium八大定位方法
xpath是通过路径的方式获得元素的,一般通过id和name的方式获得元素位置,这是非常简单的,但有时我们无法获得id和name,就可以通过xpath,xpath基本上可以获得任何元素的精准位置,但是获得的速度相对来说比较慢,而且使用xpath获得元素位置,当页面进行修改,元素位置发生改变,我们前面的脚本有时就需要修改,所以页面如果频繁较大修改,可以减少xpath的使用。其他四种就和它们的名字相同,大家可以自行尝试一下。2.可以打开元素,进行查找,也可以点击左上角箭头,再点击web页面上需要的元素,如图。
2024-08-04 01:04:34
2139
原创 不会还有人判断字符是否为数字或字母还用Ascii吧
Character.isWhitespace(char ch) 判断这个字母是不是一种空格。Character.isLowerCase(char ch) 判断这个字符是不是小写字母。Character.isUpperCase(char ch) 判断这个字符是不是大写字母。Character.isLetterOrDigit(ch) 判断ch是否为字母或数字。Character.isLetter(ch) 判断ch是否为字母。Character.isDigit(ch) 判断ch是否为数字。
2024-03-12 14:20:56
299
原创 SpringBoot测试jdbc时dataSource.getClass()出现空指针异常
SpringBoot测试jdbc时dataSource.getClass()出现空指针异常
2024-02-16 09:43:57
400
原创 idea中Spring项目yml文件注释中文乱码问题
2.找到File Encodings,然后再将编码统一设置为UTF-8即可。当出现这种情况一般就是idae的配置问题,解决起来也是非常简单的。2.然后再把下面字符集设为UTF-8即可。1.依次点击黑框选项。
2024-01-28 20:40:54
1275
原创 【Spring】快速入门Spring Web MVC
什么是Spring Web MVC,MVC,如何创建一个Spring MVC项目,几种注解的作用,postman的下载使用。
2023-10-27 22:34:20
590
原创 【网络编程】UDP数据报套接字编程和TCP流套接字编程
Socket 是客户端Socket,或服务端中接收到客户端建立连接(accept方法)的请求后,返回的服务端Socket。知道上面的,就可以创建一个简单的服务端客户端,一发一收,就是客户端请求服务端,请求什么,客户端收到什么。其实,相对于4只是修改了一些方法和属性,那么,我们也可以重新写一个类继承4中的服务器,这样会更加的简单。不管是客户端还是服务端Socket,都是双方建立连接以后,保存的对端信息,及用来与对方收发数据的。这些资源都是通过网络编程进行数据传输,所以网络编程的需要是必不可少的。
2023-10-03 10:27:22
599
原创 【网络原理】初始网络,了解概念
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。local是表识了局域网是本地的,是私有的,是一个内网。在网络信息传输中,传的数据有着很大的区别,那个数据可能是照片、视频、文字等,那么格式就会不同,如何让对方知道传的是什么数据呢。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。
2023-09-30 11:58:21
1119
原创 【多线程】线程安全的集合类
相比HashTable,ConcurrentHashMap就进行了优化,只对写操作进行加锁(锁的不是整个对象,而是‘桶锁’,以每个链表的头节点作为锁,那么,只有多线程同时访问一个桶时才会锁冲突),读并没有加锁(但是使用了volatile,保证内存的可见性)那么多线程读时,效率就会大大提升。当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。CopyOnWrite容器即写时复制的容器。
2023-09-29 15:18:40
157
原创 【多线程】常用的接口和类(Callable,ReentrantLock,原子类,信号量,CountDownLatch)
常用的接口和类(Callable,ReentrantLock,原子类,信号量,CountDownLatch)
2023-09-29 11:26:29
266
原创 【多线程】常见的锁策略与synchronized原理
常见的锁策略。乐观锁:在乐观锁中会假设共享资源并没有加锁,对其进行访问时,直接访问,如果有其他线程对其访问,则会放弃此次访问,等待一定再次访问(乐观锁虽然没有加锁,但是可以识别出数据冲突,下面讲)。多线程之间,读(访问)数据与读数据之间并不会有线程安全,但是读数据与写(修改)数据之间却会,我们如果把两者放入一个锁中,对性能便会造成损耗,这个时候读写锁便孕育而生了。公平锁就是当多个线程访问共同资源时,当锁释放后,会按照先后等待的先后顺序获得锁,先来后到,锁里需要含特定的等待队列顺序,所以需要更大的开销。
2023-09-18 20:34:15
246
原创 【多线程案例】线程池的应用及实现
线程池就相当于一个池子,里面有很多的创建好的线程,可以进行统一的管理。当我们使用线程的时候,直接从里面调取,而不用在频繁的创建与销毁。降低了线程创建销毁的开销:不用频繁的创建销毁线程,减少了资源 的开销;提高系统的稳定性:线程池中的线程是有限的的,避免了创建了大量线程,造成系统崩溃;提高资源的利用率:线程池能够合理的分配系统资源(CPU时间,内存等),提高资源的利用率;方便管理线程:线程池中的线程可以统一进行管理,方便创建,暂停,启动,销毁等操作;
2023-09-04 10:28:00
256
原创 【多线程案例】定时器应用及实现
Timer中核心的方法是schedule,schedule中有俩个参数,一个是参数是执行任务代码,另一个参数是指定代码多少毫秒后执行。使用优先级堵塞队列:那么,我们的扫描线程只需要扫描队列的队头,因为 在这个优先级堵塞队列中可以使最先执行的任务放在队头,而且在扫描到这个对头后,我们也可以进入休眠,更一步减少资源浪费。如果使用普通队列:在执行任务前,扫描线程不停的遍历队列,找到要执行的任务,在遍历时,线程执行的速度时非常快的,这个时候就非常浪费CPU资源。自己实现一个定时器能够帮助我们更好的理解定时器。
2023-09-03 20:51:32
253
原创 【多线程案例】生产者消费者模型(堵塞队列)
堵塞队列也是队列,故遵循先进先出的原则。但堵塞队列是一种线程安全的数据结构,可以避免线程安全问题,当队列为空时,继续出队列会发生堵塞,直至其他线程有元素进队列。当队列满时,继续入队列会堵塞,直至其他线程有元素出队列。生产者消费者模型就是最经典的堵塞队列模型之一。
2023-09-03 19:13:44
276
原创 【多线程】线程间通信及状态
如果等待机制成立,那么运行过程应该是先启动线程t1,然后打印"Thread-0: begin",然后执行wait(),进入等待并释放锁,然后在启动t2后会先打印"t2: begin",然后唤醒t1,但是因为锁还没释放,会继续执行t2后面代码,打印"t2: end",最后释放锁,执行t1,打印"Thread-0: end",如果运行结果和我们分析相同,那么等待机制成立。实例化一个线程未启动,这时线程就是NEW状态,当启动后,运行中就是RUNNABLE状态,等待线程运行结束,就是TERMINATED状态。
2023-09-03 09:59:14
144
原创 【多线程案例】单例模式(懒汉模式和饿汉模式)
提起单例模式,就必须介绍设计模式,而设计模式就是在软件设计中,针对特殊问题提出的解决方案。它是多年来针对一些常见的问题的解决方法,具有良好的可复用性、可扩展性和可维护性。标准的设计模式有23种,单例模式就是最常见的一种,其目的是确认一个类只有一个实例对象,并且可以提供一个全局访问点来访问该实例。单例就是指一个类的实例只有一个,即该类的所有对象都指向用同一个实例。
2023-09-01 15:48:38
695
原创 【MySQL】Java实现JDBC编程
操作和连接不同数据库都需要一种连接的软件组件,即数据库驱动包。数据库驱动包中包含了与特定数据库相对应的API,使得应用程序可以与数据库进行通信。而不同的数据库提供的API都不相同,从而造成很麻烦,这个时候JDBC就应运而生了,让Java连接数据库变得简单。executeQuery,executeUpdate都是Statement中的方法,前者用于查询,后者用于增加,删除。数据库编程必须掌握至少一门编程语言,一种数据库,会导入数据库驱动包。这是插入的程序,其他的操作和这区别不大,大家可以自己探索。
2023-08-13 11:44:27
529
1
MySQL思维导图,适合快速上手及复习
2023-06-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人