JavaScript
脚本语言,不用编译直接运行 组成 ECMAScript: 规定了JS基础语法核心知识,包括变量,数据类型,流程控制,函数,对象等 BOM: 浏览器对象模型,用于操作浏览器本身,如:页面弹窗,地址栏操作,关闭窗口等。 DOM: 文档对象模型,用来操作HTML文档,如更改标签内内容,更改标签内字体样式 JS 核心语法JS引入方式 内部引入 必须在\\ 之间 在HTML文档中可以在任何地方放任何数量script 一般把脚本置于\元素底部 外部引入 写完了引入 书写规范 : 结束符,每行结尾以分号结尾,结尾分号可有可无 基础语法变量 JS中用 let 关键字声明变量(弱类型语言, 变量可以存放不同类型的值)12345<script> let a = 20; a = "Hello"; alert(a);</script> const 声明常量 输出方式123console.log() // 输出到控制台window.alert(a) // 弹出警告框document.write() //...
网络编程
基本的通信架构 基本的通信架构包括两种 : CS架构(Client客户端/Server服务端), , C需要程序员开发 BS架构(Browser浏览器/Server架构) : B不需要程序员开发 网络通信三要素 : IP, 端口, 协议 IP InetAddress 1234567891011121314151617181920212223242526package demoInetAddress; package demoInetAddress; import java.net.InetAddress; public class Net { public static void main(String[] args) { try { // 1. 获取本机IP对象 InetAddress ip1 = InetAddress.getLocalHost(); ...
线程
进程和线程的定义 进程: 一个应用程序 线程: 一个进程内的多个处理部分 每当启动一个进程,CPU会分配给进程一部分时间单元,进程内的线程可以调用本进程内的资源 eg. 对于Java程序来说,在DOS命令窗口中输入:1java HelloWorld 回车后,会先启动JVM, JVM就是一个进程,之后JVM在启动一个主线程调用main方法(main就是主线程)同时启动垃圾回收线程复制看护,回收垃圾 最起码,Java程序至少有两个线程并发,一个是垃圾回收机制, 一个是main的主线程。 线程的生命周期 出生状态 就绪状态 执行状态 阻塞状态 等待状态 死亡状态 线程的构造方法 实现线程主要是通过两种Java提供的方式, 分别为继承Java.lang.Thread类与实现Java,lang.Runnable接口 1....
lombok
1.Lombok简介官方介绍Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more. 大概的意思:Lombok是一个Java库,能自动插入编辑器并构建工具,简化Java开发。通过添加注解的方式,不需要为类编写getter或eques方法,同时可以自动化日志变量。官网链接 简而言之:Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。博客及源码GitHub链接 .Lombok使用使用Lombok需要的开发环境Java+Maven+IntelliJ...
最小割
最小割就是最大流,(求完了之后的残留网络就是最小割) 最小割的求解方法在 Dinic 算法中,求完最大流后,残留网络中不再存在从源点到汇点的增广路径。此时,我们可以通过一次 BFS,从源点出发遍历残留网络,标记所有仍可到达的顶点。代码中的 minCut() 函数正是利用最后一次 BFS 计算的结果: cpp 复制编辑 std::vector<bool> minCut() { std::vector<bool> c(n); for (int i = 0; i < n; i++) { c[i] = (h[i] != -1); } return c; } 这里返回的布尔数组 c 表示每个顶点是否在源点 s 的可达集合 S 中。根据最大流最小割定理,从 S 到 T(不可达部分)的边就是最小割边。虽然函数本身只返回了 S 集合的信息,但你可以通过扫描所有边,找出那些一端在 S(c[u] == true)而另一端在 T(c[v] ==...
最大流
求解从源点s到汇点t的最大流量问题 Fold - fulkerson 依赖一个残留网络,每次更新一条从源点到汇点的路径的流量,在更新的时候同时在残留网络建立对应边的反边,直到残留网络没有从s - t的边, 最大流最小割定理 一个流是最大流,当且仅当他的残留网络不包含增广路径 Edmonds-Karps 对于Fold - fulkerson算法,虽然可以正确的找到他的最大流,但是他的时间复杂度依赖于边的权, 比如《算法竞赛》 P666, 对于Fold - fulkerson改进,使用bfs, 每次找到最短的增广路径,对该路径进行计算,可以大大优化时间复杂度, 一次bfs的时间复杂度是 o ( m ) , 对于bfs, 增广要处理n个点, m条边, 故时间复杂度为 o ( nm ), 综合起来时间复杂度是o ($n ^ 2 * m$) 代码 :1 先放一个jiangly代码 :...
反射
1. 反射机制概述Java 的反射机制允许程序在运行时获取类的信息,并对其进行操作,而无需在编译时知道具体的类结构。简单来说,反射使得程序可以动态加载类、检查类的成员(字段、方法、构造函数等)、调用方法和创建对象。正因为这种动态性,反射在很多框架(如 Spring、Hibernate)、依赖注入、动态代理等领域中被广泛使用。 2. 基本使用2.1 获取 Class 对象反射的入口是 java.lang.Class 对象,获取方式主要有三种: 使用 .class 语法: java 复制编辑 Class<String> clazz1 = String.class; 通过对象的 getClass() 方法: java 复制编辑 String str = "Hello"; Class<?> clazz2 = str.getClass(); 使用 Class.forName() 方法: 适合动态加载类,传入类的全限定名。 java 复制编辑 Class<?> clazz3 =...
类字节码
JVM 基础 - 类字节码详解 源代码通过编译器编译为字节码,再通过类加载子系统进行加载到JVM中运行。@pdai # 多语言编译为字节码在JVM运行计算机是不能直接运行java代码的,必须要先运行java虚拟机,再由java虚拟机运行编译后的java代码。这个编译后的java代码,就是本文要介绍的java字节码。 为什么jvm不能直接运行java代码呢,这是因为在cpu层面看来计算机中所有的操作都是一个个指令的运行汇集而成的,java是高级语言,只有人类才能理解其逻辑,计算机是无法识别的,所以java代码必须要先编译成字节码文件,jvm才能正确识别代码转换后的指令并将其运行。 Java代码间接翻译成字节码,储存字节码的文件再交由运行于不同平台上的JVM虚拟机去读取执行,从而实现一次编写,到处运行的目的。 JVM也不再只支持Java,由此衍生出了许多基于JVM的编程语言,如Groovy, Scala, Koltin等等。 #...
Java14新特性-Record类
Java 中的 Record 类Record 类是 Java 14 引入的一种新特性,旨在简化不可变数据类的定义。它类似于枚举类,用于标记不可变的数据类。Record 类通过减少样板代码,使得类的定义更加简洁和紧凑12。 Record 类的定义 使用 record 关键字可以定义一个 Record 类。例如,定义一个包含 start 和 end 两个字段的 range 类,可以这样写: public record range(int start, int end) {} 这相当于定义了一个 final 类,并自动实现了 equals、hashCode 和 toString 方法2。 使用示例 以下是一个使用 Record 类的示例: 12345678public class Main { public static void main(String[] args) { range r = new range(100, 200); System.out.println(r.start()); // 输出: 100 ...
分块
分块就是将一段数据分成一些小块, 对每个块单独处理使其不超过时间限制, 分块更多是一种思想,他介于线段树和树状数组之间。 一.给出一个长为 n 的数列,以及 n 个操作,操作涉及区间加法,区间求和。输入格式 第一行输入一个数字 n。 第二行输入 n 个数字,第 i 个数字为 a_i,以空格隔开。 接下来输入 n 行询问,每行输入四个数字 \mathrm{opt}、l、r、c,以空格隔开。 若 \mathrm{opt} = 0,表示将位于 [l, r] 的之间的数字都加 c。 若 \mathrm{opt} = 1,表示询问位于 [l, r] 的所有数字的和 \bmod (c+1)。 思路 : 将数组分块每次加的时候,如果L与R在同一块里面,直接遍历该数组,最差时间复杂度O(nsqrt(n)),如果不是...
