华为笔试&面经
牛客上一些笔试题1.最高分是多少注释了一些调试信息
这题就熟悉输入输出流程
还有就是单元 测试中不准使用 System.out 来进行人肉验证,必须使用 assert 来验证。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int N = in.nextInt(); i ...
Docker
Docker快速构建,运行,管理应用的工具
Docker是一种用于开发、交付和运行应用程序的开放平台。它基于容器化技术,可以将应用程序及其依赖项打包到容器中,并在任何环境中快速、可靠地运行。
当我们利用Docker安装应用时候,Docker会自动搜索并且下载镜像(image)这个镜像不仅包含应用本身,还包含应用所需要的环境,配置,系统函数库。Docker会在运行的时候,创建一个隔离环境,称为容器(container)
Linux环境准备Linux环境的准备
VMware安装CentOS安装 :网卡地址改为静态IP,这样可以避免每次启动虚拟机IP都变化。
:设置虚拟机快照,方便退回到之前的版本
SSH客户端: Xshell:方便远程连接虚拟机
Docker的安装1.卸载旧版12345678yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-l ...
Java集合常用方法
总结的Java集合常用方法,刷题前看看
Takeaways
苍穹外卖1.软件开发流程
1.1完成需求规格说明书、产品原型编写。需求规格说明书, 一般来说就是使用 Word 文档来描述当前项目的各个组成部分,如:系统定义、应用环境、功能规格、性能需求等,都会在文档中描述。
1.2设计设计的内容包含 UI设计、数据库设计、接口设计。
UI设计:用户界面的设计,主要设计项目的页面效果,小到一个按钮,大到一个页面布局,还有人机交互逻辑的体现。
数据库设计:需要设计当前项目中涉及到哪些数据库,每一个数据库里面包含哪些表,这些表结构之间的关系是什么样的,表结构中包含哪些字段。
即是画出ER图,实体关系图
ER图(实体-关系图)是数据库设计中常用的一种图形化工具,用于描述数据库中实体(Entity)之间的关系(Relationship)和属性(Attribute)。它是一种概念模型,用于可视化数据库结构,帮助设计者理清数据模型的结构和关系,从而更好地设计数据库。
以下是 ER 图中常见的几个要素:
实体(Entity):表示数据库中存储的现实世界中的一个事物,可以是一个对象、一个概念或者一个事件。每个实体通常有属性,用来描述实体的特征。
属性(Attri ...
MybatisPlus(持续更新)
Mybatis-PlusMyBatis-Plus (baomidou.com)
MyBatis-Plus 是基于 MyBatis 的增强工具,提供了便捷的 CRUD 操作、条件构造器、分页查询、自动填充、乐观锁、逻辑删除等功能,极大地简化了 MyBatis 的开发流程,提高了开发效率。
快速入门mybatisplus1.引入mybatis-plus的起步依赖代替mybatis
12345<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.5</version></dependency>
mybatis-plus官方提供了starter,集成了mybatis和plus的所有功能,并且实现了自动装配的效果
2.自定义的mapper接口,继承mybatisplus提供的BaseMapper接口,并且 ...
刷Leecode笔记(八)动态规划篇(持续更新)
动态规划动态规划的理论基础动态规划 Dynamic Programming(DP):若果一个问题有很多重叠的子问题,使用动态规划是最有效的。
动态规划中的每一个状态是由上一个状态推导出来的,这一点就有别于贪心,贪心是没有推导状态,直接从局部选最优的
动态规划的解题步骤
确定dp数组以及其下标的含义
确定递推公式(转移状态公式)
dp数组如何初始化
确定遍历顺序
举例推导dp数组
动态规划如何debug找问题的最好方式就是把dp数组打印出来,看看究竟是不是按照自己思路推导的!
一些同学对于dp的学习是黑盒的状态,就是不清楚dp数组的含义,不懂为什么这么初始化,递推公式背下来了,遍历顺序靠习惯就是这么写的,然后一鼓作气写出代码,如果代码能通过万事大吉,通过不了的话就凭感觉改一改。
这是一个很不好的习惯!
做动规的题目,写代码之前一定要把状态转移在dp数组的上具体情况模拟一遍,心中有数,确定最后推出的是想要的结果。
然后再写代码,如果代码没通过就打印dp数组,看看是不是和自己预先推导的哪里不一样。
如果打印出来和自己预先模拟推导是一样的,那么就是自己的递归公式、初始化或者遍历顺序有问题了。 ...
刷Leecode笔记(七)贪心算法(持续更新)
贪心算法理论基础本质是:每一个阶段选择局部最优,从而打到所谓的全局最优,即为贪心
例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?
指定每次拿最大的,最终结果就是拿走最大数额的钱。
每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。
再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划
刷题或者面试的时候,手动模拟一下感觉可以局部最优推出整体最优,而且想不到反例,那么就试一试贪心。
例如刚刚举的拿钞票的例子,就是模拟一下每次拿做大的,最后就能拿到最多的钱,这还要数学证明的话,其实就不在算法面试的范围内了,可以看看专业的数学书籍!
贪心解题的一般步骤
将问题分解为若干个子问题
找出合适的贪心策略
求解每一个问题的最优解
将局部最优解堆叠成全局最优解
455.分发饼干大饼干先满足大胃口的,局部最优解到全局最优解
123456789101112131415class Solution { public int findContentChildren(int[] g ...
刷Leecode笔记(六)回溯算法篇(持续更新)
回溯算法理论基础回溯算法也叫做,回溯搜索法,它是一种搜索的方式
回溯的本质是穷举,穷举出所有的可能,再选出我们想要的答案
可以加一些剪枝的操作优化,但改变不了穷举的本质
回溯和递归是相辅相成的,递归函数的下面就是递归的过程
回溯算法解决的问题
组合问题:N个数里面按照一定规则找出k个数的集合
切割问题:一个字符串按照一定的规则,有几种切割方式
子集问题:一个N个数的集合里有多少符合条件的子集
排列问题:N个数按照一定规则全排列,有几种排列组合
棋盘问题:N皇后,解数独等
组合问题:{1,2}{2,1}就是一个组合,不强调顺序
排列问题:{1,2}{2,1}就是两个组合,有顺序
如何理解回溯法回溯法解决的问题都可以抽象为树形结构,是的,我指的是所有回溯法的问题都可以抽象为树形结构!
因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。
递归就要有终止条件,所以必然是一棵高度有限的树(N叉树)。
这块可能初学者还不太理解,后面的回溯算法解决的所有题目中,我都会强调这一点并画图举相应的例子,现在有一个印象就行。
12345678910111 ...
太子湾+法喜寺游记
一篇流水账
SpringBoot 原理篇
SpingBoot原理在前面十多天的课程当中,我们学习的都是web开发的技术使用,都是面向应用层面的,我们学会了怎么样去用。而我们今天所要学习的是web后端开发的最后一个篇章springboot原理篇,主要偏向于底层原理。
我们今天的课程安排包括这么三个部分:
配置优先级:Springboot项目当中属性配置的常见方式以及配置的优先级
Bean的管理
剖析Springboot的底层原理
1. 配置优先级在我们前面的课程当中,我们已经讲解了SpringBoot项目当中支持的三类配置文件:
application.properties
application.yml
application.yaml
在SpringBoot项目当中,我们要想配置一个属性,可以通过这三种方式当中的任意一种来配置都可以,那么如果项目中同时存在这三种配置文件,且都配置了同一个属性,如:Tomcat端口号,到底哪一份配置文件生效呢?
application.properties
1server.port=8081
application.yml
12server: port: 8082
a ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
123456789101112131415---title:date:updated:type:comments ...
刷Leecode笔记(二)链表篇
链表篇移除链表元素,设计链表,反转链表,交换链表节点,删除链表,相交链表,环形链表链表链表这一张,集合中的LinkedList底层实现就是双链表,封装好了增删改查等各种方法,这里相当于是手写源码了属于是
203.移除链表元素123456789101112131415161718192021222324252627282930/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */class Solution { public ListNode removeElements(ListNode he ...
刷Leecode笔记(一)数组篇
数组篇两数之和,二分查找,移除元素,长度最小子数组,螺旋矩阵数组1.两数之和123456789101112131415class Solution { public int[] twoSum(int[] nums, int target) { int n = nums.length; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (nums[i] + nums[j] == target) return new int[] { i, j }; } } return new int[0]; }}//常规两层for循环,注意同一个元素不能再匹配一次,所以,内层循环从J=i+1开始//区别常规的,判断冒泡排序的算法,内层 ...
刷Leecode笔记(三)哈希表篇
哈希表篇字母异味,数组交集,数字,字符串哈希表字母异位242.有效的字母异位1234567891011121314151617181920212223242526272829303132333435363738394041class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } HashMap<Character, Integer> map = new HashMap<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); map.put(c, map.getOrDefault(c, 0) + 1); } ...
刷Leecode笔记(五)二叉树篇
二叉树篇二叉树理论基础树的基础123456789101112131415节点的度: 一个节点含有的子树的个数称为该节点的度。如上图,T 节点的度为4树的度: 一颗树中,最大的节点的度称为树的度。如上图,该树的度为4叶子节点或终端节点: 度为0的节点称为叶子节点。如上图,T4、T11、T21、T22、T31、T32、T33为叶子节点双亲节点或父节点: 若一个节点含有子节点,则这个节点称为其子节点的 父节点。如上图,T 节点是 T4 节点的父节点孩子节点或子节点: 一个节点含有的子树的根节点称为该节点的子节点。如上图,T4 节点是 T 节点的子节点根节点: 一颗树中,没有双亲节点的节点称为根节点。如上图,T 节点为根节点节点的层次: 从根开始定义,根为第1层,根的子节点为第二层,以此类推。如上图,该树有3层节点的深度: 某节点层次是第几层,则它的深度是多少。如上图,T 节点深度为1,T1 节点深度为2树的高度: 树中节点的最大层次。如上图,树的高度为3非终端节点或分支节点: 度不为0的节点。如上图,T、T1、T2、T3 为分支节点兄弟节点: 父亲节点相同的节点互称为兄弟节点。如上图,T1、 ...
刷Leecode笔记(四)栈与队列篇
栈与队列篇用队列实现栈,有效的括号,逆波兰表达式,滑动窗口最大值,前K个高频元素栈与队列232.用栈实现队列12345678910111213141516171819202122232425262728293031323334class MyQueue { Stack<Integer> stackIn; Stack<Integer> stackOut; public MyQueue() { stackIn = new Stack<>();// 负责进栈 stackOut = new Stack<>();// 负责出栈 } // 入队的操作,过程即将数据压入进栈 public void push(int x) { stackIn.push(x); } public void InTuOut() { if (!stackOut.isEmpty()) { ...