Java,八股,cv,算法——双非研0四修之路day38

目录

昨日总结

今日计划

算法—— 二叉搜索树中的众数

Jvm笔记

商城项目遇到的问题

问题一

问题二

问题三

昨日八股答案 

今日八股

                   ​编辑


昨日总结

  • JVM底层原理学习,米粒商城项目(基本环境配置,逆向工程搭建)
  • cv(停滞中)
  • 小林coding--MySQL面试篇(2/7)
  • 代码随想录--二叉搜索树中的众数

今日计划

  • JVM底层原理学习,米粒商城项目ing
  • cv(停滞中)
  • 小林coding--MySQL面试篇(3/7)
  • 代码随想录--二叉树的最近公共先祖

算法—— 二叉搜索树中的众数

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。

如果树中有不止一个众数,可以按 任意顺序 返回。

假定 BST 满足如下定义:

  • 结点左子树中所含节点的值 小于等于 当前节点的值
  • 结点右子树中所含节点的值 大于等于 当前节点的值
  • 左子树和右子树都是二叉搜索树

示例 :

输入:root = [1,null,2,2]
输出:[2]
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    Map<Integer,Integer> map = new HashMap<>();
    public int[] findMode(TreeNode root) {
        dg(root);
    List<Integer> maxkeys = new ArrayList<>();
    int curMax = Integer.MIN_VALUE;
    
    for(Map.Entry<Integer,Integer> entry : map.entrySet()) {
        int value = entry.getValue();
        if(value > curMax) {
            curMax = value;
            maxkeys.clear();
            maxkeys.add(entry.getKey());
        }else if (value == curMax) {
            maxkeys.add(entry.getKey());
        }
    }
        return maxkeys.stream().mapToInt(Integer::intValue).toArray();
    }
    public void dg(TreeNode root) {
        if(root == null) {
            return;
        }
        dg(root.left);
        if(root != null) {
            if(map.get(root.val) == null)
               map.put(root.val,0);
            map.put(root.val,map.get(root.val) + 1);
        }
        dg(root.right);
    }
}

Jvm笔记

  • String不在用char【】来存储了,改用byte【】加上编码标记
  • String代表不可变的字符序列
  • 字符串常量池是不会存储相同内容的字符串的。因为String的String Pool是一个固定大小的Hashtable
  • 字符串都保存在堆中

商城项目遇到的问题

问题一

        自己在本地创建了数据库,在运行后端读取数据库内容时,总是报连接错误的问题。每次尝试数据库连接时,测试连接mysql是没问题的。之后又去linux下的mysql查看数据库内容,发现是空的,原来数据库建错了地方。。。

问题二

renren-fast中mysql在linux下区分大小写,需要把qrtz前缀的表改成大写

问题三

建议node.js采用14版本以上的,不然安装会出现一些兼容的问题(我上来用的12的版本,问题很多,非常不建议)

昨日八股答案 

  • MySQl的关键字in和exist

二者都是用来处理子查询的关键字

In关键字:用于检查左边的表达式是否存在于右边的列表或子查询的结果集中。

例如

select * from customers
where country in ("china","france");

Exists关键字:用于判断子查询是否至少能返回一行数据。

性能上:当子查询的表很大时,exists的性能优于in。exists一旦找到匹配项就会立即停止查询,而in会扫描整个子查询结果集

NULL值处理:in能够正确处理子查询中包含null值的情况,而exist不受子查询结果值中NULL的影响

  • mysql的基本函数

字符串函数:

concat(str1,str2):连接多个字符串,返回一个合并的字符串

Length(str):返回字符串的长度

substring(str,pos,len):从指定位置开始,截取指定长度的子字符串

replace(str,from_str,to_str):将字符串中的某部分替换为另一个字符串

数值函数:

abs(num):返回数字的绝对值

power(num,number):返回指定数字的指定幂次方

日期和时间函数

now():返回当前时间函数

curdate():返回当前日期

聚合函数:

count(column):计算指定列中的非NULL的个数

sum(column):计算指定列的总和

avg(column):计算平均值

max、min(column):返回最大、最小值

  • SQL查询语句的执行顺序

所有的查询语句都是从FROM开始执行,在执行过程中,每个步骤都会生成一个虚拟表,这个虚拟表将作为下一个执行步骤的输入,最后一个步骤产生的虚拟表即为输出结果。

(9) SELECT 
(10) DISTINCT <column>,
(6) AGG_FUNC <column> or <expression>, ...
(1) FROM <left_table> 
(3) <join_type>JOIN<right_table>
(2) ON<join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(7) WITH {CUBE|ROLLUP}
(8) HAVING <having_condtion>
(11) ORDER BY <order_by_list>
(12) LIMIT <limit_number>;
  • 如何用MySQL实现一个可重入的锁

创建一个保存锁记录的表(最重要的字段是存储锁的重入次数)。

加锁:

1 开启事务  2 执行查询语句,如果记录不存在,直接加锁;如果存在,增加重入次数 3 提交事务

解锁:

1 开启事务 2 执行查询语句,如果记录存在,重入次数减1;如果记录存在,重入次数小于等于0,则完全释放锁 3 提交事务

今日八股

  • 执行一条SQL请求的过程
  • mysql的引擎
  • 索引的理解
  • MySQL聚簇索引和非聚簇索引的区别

                   ​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值