09 2021 档案
摘要:pytest和自带的unittest对比 unittest 1、是python集成的,使用方便,也更广泛。 2、可以使用@ddt参数化 3、最多针对(模块)类级别的setup/teardown pytest 1、支持参数化,但是没有unittest灵活 2、用例失败自动截图,pytest-html
阅读全文
摘要:经常的创建和销毁,会占用特别大的资源,对性能影响很大。 思路:提前穿件好多个线程,放入线程池中,使用时直接获取,使用完放回池中,可以避免频繁创建销毁、实现重复利用。 好处: 提高响应速度(减少创建新线程的时间) 降低资源消耗(重复利用线程池中的线程,不需要每次都创建) 便于线程管理 corePool
阅读全文
摘要:生产者消费者模式 这是一个线程同步的问题,生产者和消费者共享同一个资源,并且生产者和消费者之间互相依赖,互为条件。 对于生产者,没有生产产品之前,要通知消费者等待,而生产生产了产品之后,又要马上通知消费者消费 对于消费者,在消费之后,要通知生产者已经结束消费,需要生产新的产品以供消费 在生产者消费者
阅读全文
摘要:从JDK5.0开始,Java提供了更强大的线程同步机制:通过显式定义同步锁对象来实现同步。同步锁使用Lock对象充当 Java.util.concurrent.locks接口是控制多个线程对共享资源进行访问的工具。锁提供了对共享资源的独占访问,每次只有一个线程对Lock对象加锁,线程开始访问共享资源
阅读全文
摘要:多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形。 某一个同步块同时拥有“两个以上对象的锁”,就可能发生“死锁”的问题。 死锁的四个必要条件 互斥条件:一个资源每次只能被一个进程使用 请求与保持条件:一个进程因请求资源
阅读全文
摘要:JUC是java.util.concurrent的简写。 JUC的意思就是java并发编程工具包。 并发编程的本质就是充分利用CPU资源。 实现多线程有三种方式:Thread、Runnable、Callable,其中Callable就位于concurrent包下。 CopyOnWriteArrayL
阅读全文
摘要:同步方法 对方法加上synchronized关键字 有synchronized的方法调用时都需要得到该方法的锁,否则无法执行。线程执行完毕释放锁后,其他线程才能获得这个锁。 若将一个大的方法申明为synchronized会影响效率。 方法里面需要修改内容菜需要锁,锁太多,浪费资源。 安全买票 pub
阅读全文
摘要:多个线程操作同一个资源 处理多线程问题,多个线程访问同一个对象,并且某些线程还想修改这个对象。这时候我们就要线程同步。线程同步其实是一种等待机制,多个需要同时访问此对象的线程进入这个对象的等待池形成队列,等待前面的线程使用完毕,下一个线程再使用。 队列和锁 由于同一进程的多个线程共享同一块存储空间,
阅读全文
摘要:线程优先级 Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程,线程调度器按照优先级决定应该调度那个线程来执行。 线程的优先级用数字表示,范围从1~10。 Thread.MIN_PRIORITY = 1; Thread.MAX_PRIORITY = 10; Thread.NORM_P
阅读全文
摘要:Thread.State --> 查看JDK帮助文档 线程状态是虚拟机状态,如下: NEW 尚未启动的线程 RUNNABLE 在Java虚拟机中执行的线程处于这个状态 BLOCKED 被阻塞等待监视器锁定的线程处于此状态 WAITING 正在等待另一个线程执行特定动作的线程处于此状态 TIMED_W
阅读全文
摘要:yield方法 礼让线程,让当前正在执行的线程暂停,但不阻塞 将线程从运行状态转为就绪状态 让cpu重新调度,礼让不一定成功。 public class TestYield { public static void main(String[] args) { new Thread(new MyYie
阅读全文
摘要:线程状态 5大状态 创建状态 new对象 就绪状态 start()后就绪,但不意味着立即执行 阻塞状态 Thread.sleep(),调用sleep、wait或者同步锁定时,进入阻塞,阻塞结束后,重新就绪,等待cpu调度 运行状态 cpu调度后,线程开始执行,进入运行状态 死亡状态 线程结束,一旦进
阅读全文
摘要:lambda表达式 为什么要使用Lambda表达式 避免匿名内部类定义过多 代码看起来简洁 去掉了无意义代码,只留下核心的逻辑 函数式接口(Functional Interface)的定义 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。 public Interface Runna
阅读全文
摘要:静态代理 public class StaticProxy { public static void main(String[] args) { // 实例化一个对象 // new 一个Web对象 new Web().WebVisit();// 不用代理 System.out.println(" "
阅读全文
摘要:Callable接口 实现Callable接口,需要返回值类型 重写call方法,需要抛出异常 创建目标对象 创建执行服务 提交执行 获取结果 关闭服务 修改下载图片 import java.util.concurrent.*; public class StartCallable implemen
阅读全文
摘要:并发问题 -> 问题处理 public class MoreTreads implements Runnable{ // 多线程同时操作同一个对象 // 买火车票的例子 private int ticketNums = 10; @Override public void run() { while(
阅读全文
摘要:线程创建 Thread:继承Thread类(重点) Runnable:实现Runnable接口(重点,推荐) Callable:实现Callable接口(了解) 实现Runnable接口 定义MyRunnable类实现Runable接口 实现run()方法,编写线程执行体 创建线程对象,调用star
阅读全文
摘要:线程创建 Thread:继承Thread类(重点) Runnable:实现Runnable接口(重点,推荐) Callable:实现Callable接口(了解) 继承Thread类 自定义线程类继承 Thread类 重写run()方法,编写线程执行体 创建线程对象,调用start()方法启动线程 /
阅读全文
摘要:核心概念 线程是独立的执行路径。 在程序运行时,即使没有自己创建的线程,后台也会有多个线程,如主线程,gc线程; main()称之为主线程,为系统的入口,用于执行整个程序; 在一个进程中,如果开辟了多个线程,线程的运行由调度器安排调度,调度器是与操作系统紧密相关的,先后顺序是不能人为的干预的。 对同
阅读全文
摘要:使用IF和COUNTIF 公式:=IF(COUNTIF(目标列,判断列首个单元格)>0,"是","否") COUNTIF用于数据完全一致的时候统计个数,大于0说明有匹配到 需要注意值必须完全匹配,注意格式 使用vlookup函数 自行学习!!!简单的使用上面的就够了。 知乎vlookup使用
阅读全文
摘要:捕获异常 自动生成try...catch快捷键:ctrl+alt+t public class TryCatch { public static void main(String[] args) { int a = 1; int b = 0; try { // 程序运行监控 System.out.p
阅读全文
摘要:什么是异常 异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。 异常发生在程序运行期间,它影响了正常的程序执行流程。 简单分类: 检查性异常:程序员无法预见,不能在编译时被简单的忽略。 运行时异常:程序员可以避免的,运行时异常可以在编译时忽略。 错误ERROR:错误
阅读全文
摘要:内部类的定义 内部类就是在一个类的内部定义了一个类,比如,A类中定义一个B类,那么B类相对于A类来说就称之为内部类,A类相对于B类就是外部类了。 成员内部类:在类下面 静态内部类:在类下面,并且用static修饰 局部内部类:在类的方法里面 匿名内部类 public abstract class M
阅读全文
摘要:抽象类 abstract修饰符可以用来修饰方法也可修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。 抽象类无法实例化(使用new创建对象),它的作用是让子类继承。 抽象方法,只有方法的声明,没有方法的实现
阅读全文
摘要:static关键字 有static的属性和方法会在类加载的时候直接加载 在同一个类内,非static的方法可以直接调用static的方法,反之不行 static的属性(变量)多线程下使用 public class Person{ // 匿名代码块在创建对象时就自动创建了,在构造方法之前 { // 匿
阅读全文
摘要:多态 同一方法可以根据发送对象的不用而采用多种不同的行为方式。 一个对象的实际类型是确定的,但可以指向对象的类型有很多 多态存在的条件 有继承关系 子类重写父类方法 父类应用指向子类对象 注意:多态是方法的多态,属性没有多态。 对象能执行哪些方法和对象左边的类型有关,和右边关系不大。 父类可以指向子
阅读全文
摘要:封装 该露的露,该藏的藏 高内聚:类内部的操作自己完成,不允许外部干涉; 低耦合:仅暴露少量的方法给外部使用。 封装(数据的隐藏) 通常,禁止直接访问对象中的属性,而应该通过操作接口来访问,这称为信息隐藏 记住下面的话: 属性私有(private),get/set 方法访问,idea 中可以用 al
阅读全文
摘要:面向对象 面向过程(线性思维) 步骤清晰简单,第一步做什么,第二步做什么,依次进行 适合处理些简单的问题 面向对象 分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对分类进行单独思考。 最后,对分类下得细节进行面向过程的思索。 适合处理复杂的问题,适合处理多人协作的问题。 宏观上面向对象处理
阅读全文
摘要:稀疏数组 稀疏数组是一种数据结构 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。 稀疏数组的处理方式是: 记录数组一共有几行几列,有多少个不同值 把具有不同值的行列及值记录在一个小规模的数组中,从而缩小程序的规模 //1、创建一个二维数组 //2、转化成稀疏数组 /
阅读全文
摘要:冒泡排序 一共有8大排序,冒泡排序无疑最为出名。 冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较。 嵌套循环,算法的时间复杂度为O(n2)。 /* 外层循环循环次数 array.length - 1 内层循环,比较判断两个数大小,大的放右边 */ import java.util.A
阅读全文
摘要:Arrays 数组的工具类 java.util.Arrays 数组对象本身没有什么方法可供调用,但可以使用Arrays类对数据对象进行一些基本操作。 Arrays类中方法都是static修饰的静态方法,在使用的时候可以直接是用来类名进行调用,不用使用对象来调用,是不用而不是不能。 常用功能 给数组赋
阅读全文
摘要:Java内存分析 堆(数组创建) 存放new的对象和数组 可以被所有线程共享,不会存放别的对象引用 栈(数组声明) 存放基本变量类型(包含这个基本类型的具体数值) 引用对象的变量(会存放这个引用在堆里面的具体地址) 方法区 可以被所有线程共享 包含了所有的class和static变量 数组三种初始化
阅读全文
摘要:数组概述 数组的定义 数组是相同类型数据的有序集合 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成 每一个数据被称作一个数组元素,每个数组元素可以通过一个下标来访问它们。 数组的声明创建 使用数组需要先声明数组变量 dataType[] arrayRefVar //首选 dataT
阅读全文
摘要:/* 计算器,基本加减乘除。 */ import java.util.Scanner; public class Main { public static void main(String[] args) { //主程序 Scanner scanner = new Scanner(System.in
阅读全文
摘要:可变参数 可以传入多个参数用于接收数据 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数,任何普通参数都要在之前申明。 在指定类型后使用...,;例如:int ... a public class Main { public static void main(String[] args)
阅读全文
摘要:命令行传参 命令行传参在dos命令中执行,实际就是传参进初始的args数组中,然后在main方法中实现操作。 public class Main { public static void main(String[] args) { for (int i =0;i<args.length;i++) {
阅读全文
摘要:Java方法 什么是方法 Java方法是语句的集合,它们在一起执行一个功能。 方法是解决一类问题的步骤的有序组合 方法包含于类和对象中 方法在程序中被创建,在其他地方被引用 设计方法的原则,保持方法的原子性,就是一个方法只完成1个功能,这样有利于后期的扩展。 方法命名规则:首字符小写,驼峰规则 pu
阅读全文
摘要:并发数比较大,单台电脑的配置(CPU、内存以及带宽)可能无法支持,这时可以使用Jmeter提供的分布式测试。 Jmeter分布式执行原理: 1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。 2、执行时,master会把脚本发送到每台slave上
阅读全文
摘要:循环结构 while 循环 do...while 循环 for 循环 在Java5中引入了一种主要用于数组的增强型for循环。 while循环 while是最基本的循环,它的结构为: while(布尔表达式){ // 循环 } 只要布尔表达式一直为true,就会一直执行下去。 大多数情况下会让循环停
阅读全文
摘要:顺序结构 Java的基本结构就是顺序结构,从上到下依次执行。 顺序结构是最简单的算法结构。 任何一个算法都离不开的一种基本算法结构(顺序结构)。 选择结构 1. if单选择结构 import java.util.Scanner; public class Main { public static v
阅读全文
摘要:selenium python学习 (一) 安装selenium 创建 baidu.py文件,输入以下内容: from selenium import webdriver driver = webdriver.Chrome() driver.get('http://www.baidu.com') p
阅读全文

浙公网安备 33010602011771号