JVM_1初识
JVM是运行Java字节码的虚拟机 JVM有针对不同的系统的特定实现 目的是使用相同的字节码 它们都会给出相同结果
字节码: 扩展名为 .class 的代码
在.class->机器码 这一步 JVM类加载器先加载字节码 然后通过解释器逐行解释执行 -> 这种方式执行速度较慢而后引入JIT 运行时编译 -> 当JIT编译器完成第一次编译后 其会将字节码对应的机器码保存下来下一次可以直接使用(机器码运行效率 高于 Java解释器)
什么是JVMJVM 全称 Java Virtual Machine 中文译名Java虚拟机
JVM功能
leetcode136只出现一次的数字
原题链接:https://leetcode.cn/problems/single-number/
解法1:异或运算
1234567891011121314/* 异或运算的性质: 相同数异或运算为0 由于只有一个出现一次的数 所以异或后只出现一次的数就是剩下的数*/class Solution {public: int singleNumber(vector<int>& nums) { for(int i = 0 ; i < nums.size() - 1; i++){ nums[i + 1] = nums[i] ^ nums[i + 1]; } return nums[nums.size() - 1]; }};
java泛型
泛型概述
泛型: 是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查
泛型的格式:<数据类型>
注意:泛型只能支持引用数据类型
泛型的好处:
统一数据类型
把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来。
扩展知识点:Java中的泛型是伪泛型
泛型的细节
泛型中不能写基本数据类型
因为基本数据类型在集合中没有办法转换为Object类 只有写包装类才能转成Object
指定泛型的具体类型后,传递数据时,可以传入该类类型或者其子类类型
但大多数是要求 传入类型与泛型类型一致
如果不写泛型,类型默认Object
泛型可以在很多地方可以定义
1. 泛型方法
代码示例:
123456789101112131415161718192021222324252627import java.util.ArrayList;public class ListUtil { private ListUtil(){}; // 类中定义一个静态 ...
leetcode1488避免洪水泛滥
原题链接:https://leetcode.cn/problems/avoid-flood-in-the-city/description
解法1: 贪心 + 二分123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354/** 贪心 + 二分 晴天日期全部记录到set<int> zero hash 记录每个湖泊上一次下雨的日期 (这里注意是只用记录上一次下雨的日期即可 操作的时候按顺序遍历 如果多于一次无法制止那么直接返回{} 即可)*/class Solution {public: vector<int> avoidFlood(vector<int>& rains) { // 记录上一次降水的日期 unordered_map<int,int>water; // 记录晴天 ...
java内部类
参考视频:https://www.bilibili.com/video/BV1Cv411372m?p=111&vd_source=c0cc92a482393bb63596629a72e3fc71
什么是内部类
内部类四种形式:
成员内部类
静态内部类
局部内部类
匿名内部类
成员内部类
代码示例: 成员内部类的定义
123456789101112131415161718192021222324252627282930313233343536373839404142//外部类public class Outer { private int age = 99; private static String a; // 成员内部类 public class Inner{ private int age = 88; private String name; public static String schoolName; //JDK16版本以后支持定义静态成员 /** ...
leetcodeLCR041数据流中的移动平均值
原题链接:https://leetcode.cn/problems/qIsx9U/
解法1:队列 按照题意模拟即可
1234567891011121314151617181920212223242526272829class MovingAverage {public: queue<int>q; int s; double cur = 0; /** Initialize your data structure here. */ MovingAverage(int size) { s = size; } double next(int val) { q.push(val); cur += val; if(q.size() > s){ cur -= q.front(); q.pop(); } return cur / q.size(); ...
leetcode2512将最顶尖的k名学生
原题链接:https://leetcode.cn/problems/reward-top-k-students/
比较适合用于练习 语言基础语法的一道题
解法1:模拟
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960/* 模拟 哈希表记录feed_back的分数 然后遍历report直接计算分数*/class Solution {public: vector<int> topStudents(vector<string>& positive_feedback, vector<string>& negative_feedback, vector<string>& report, vector<int>& student_id, int k) { unordered_map&l ...
java反射机制
参考视频:https://www.bilibili.com/video/BV1ke4y1w7yn/?p=7&spm_id_from=pageDriver&vd_source=c0cc92a482393bb63596629a72e3fc71
动态代理
为什么需要代理代理可以无侵入式的给对象增强其他的功能调用者 -> 代理 -> 对象
代理长什么样?代理里面就是对象要被代理的方法
Java通过什么来保证代理的样子?通过接口保证 后面的对象和代理需要实现同一个接口接口中就是被代理的所有方法
动态代理的代码实现代理类的实现
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980import java.lang.reflect.InvocationHandler;import java.lang.reflect.Metho ...
leetcode714买卖股票的最佳时机含手续费
原题链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-with-transaction-fee
解法1:状态机模型
123456789101112131415161718192021/** 相当于在之前状态转移的基础上 除了处理prices[i] 还要多一个处理手续费的过程 统一将手续费的花销 放在买入的这个过程处理 */class Solution { public int maxProfit(int[] prices, int fee) { int n = prices.length; // 前i天 持股状态为j时 可获得的最大现金 // j = 0 不持股 j = 1持股 int [][] f = new int[n][2]; f[0][0] = 0; f[0][1] = -prices[0] - fee; for(int i = 1 ; i < n ; ...
leetcode2731移动机器人
原题链接:https://leetcode.cn/problems/movement-of-robots
解法1:脑筋急转弯 + 排序统计还要注意一下溢出问题 算是这题比较坑的地方
123456789101112131415161718192021222324252627282930313233343536/** 1. 题目要求的是机器人之间的距离 与顺序无关 -> 那么把机器人位置交换 并不会对答案产生影响 2. 相撞可视为互相穿过对方 -> 可以无视相撞规则 把每个机器人堪称独立运动 3. 由于要计算的是每一对机器人之间的距离 所以先对运动后的机器人位置进行排序 从小到大 枚举 对于第i个数 a[i] 其与前i个数的距离为 (a[i] - a[i - 1]) + (a[i] - a[i - 2]) + ... + (a[i] - a[0]) = i * a[i] - (a[i - 1] + a[i - 2] + ... + a[0]) */class Solution { private st ...