- 博客(28)
- 收藏
- 关注
原创 2020秋招面试—嵌入式开发面试问题
2020秋招面试—嵌入式开发面试问题大疆华为大疆数据通信协议常见的有SPI、I2C、UART等单线收发的通信协议,还有CAN、RS485等差分收发的协议。总结图有空再补。SPI需要几根线?工作原理?通常需要四根线,分别是主机输出从机输入MOSI、主机输入从机输出MISO、主机输出时钟SCK和片选信号NSS,当存在多个从机时,多几个从机就需要补几根 NSS 片选信号线。SPI定义了时钟极性CPOL和时钟相位CPHA:CPOL为0时,SCK空闲状态为低电平;CPOL为1时,SCK空闲状态为
2020-11-08 12:07:45
1281
1
原创 剑指43—1~n中1出现的个数
剑指43—1~n中1出现的个数题目题目对给定的n,统计1~n中每一位上1出现的次数,最后输出总和。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
2020-10-28 11:57:19
324
原创 LeetCode刷题笔记—17.电话号码的字母组合
No17:电话号码的字母组合题目思路代码题目LeetCode17给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。输入:“23”输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].思路没什么好说的,直接dfs即可,需要注意的是,这里对数字的顺序不做要求,即:“ab” 和 “ba” 是同一个答案,因此我们不需要使用 hasUsed 标识路径,直接
2020-10-26 19:23:51
411
原创 设计模式—装饰器模式
设计模式—装饰器模式什么是装饰器模式装饰器模式的实现什么是装饰器模式官方定义:装饰器模式,是动态地给一个对象添加一些额外的职责的模式,就增加功能来说,装饰器模式比生成子类更为灵活。装饰器模式主要用于对某种基类需要经常进行修改属性的场合,比如 功放 就是对 有效信号 的装饰(放大有效信号), 滤波器 就是对 噪声 的装饰(削减噪声)。Java中的 IO流 就广泛使用了 装饰器模式 ,比如 BufferedInputStream 等,都是对底层的节点流进行装饰,来提高性能的例子。装饰器模式的实现装
2020-10-13 11:04:23
308
原创 设计模式—外观模式
设计模式—外观模式什么是外观模式外观模式的实现什么是外观模式外观模式属于设计模式中的结构型模式,主要适用于存在众多接口并需要按照不同顺序调用的场合,它可以为子系统的众多接口提供统一的高层调用接口,使子系统更容易使用。简单来说,外观模式就是对接口进行组合并封装成高一级的接口的模式。举一个例子,快餐店里有许多类型的食物(类似于子系统中的接口),顾客想吃不同的食物时就需要自己去挑选(相当于其他业务组去调用不同的接口),如果快餐店自己把大多数顾客想吃的食物搭配组合起来推出套餐,那么顾客点餐就方便快捷得多,会获
2020-10-07 21:35:06
157
原创 设计模式—观察者模式
设计模式—观察者模式什么是观察者模式观察者模式的实现什么是观察者模式观察者模式,是一种基于事件和响应的设计模式,常用于传统的窗体应用程序(触发鼠标点击事件等)以及游戏开发领域(触发陷阱事件等)。比如玩仙剑4的时候,点击“攻”按钮会发动普通攻击、点击“术”按钮会消耗神力发动法术、点击“技”按钮会消耗气力发动技能;在野外乱逛的时候,可能会遇到野怪进入战斗、也可能遇到宝箱获得宝物,还可能遇到存档点触发存档事件。这些都是不同的触发事件,也要求程序对其有不同的响应,传统的想法有:轮询:在程序中每隔一定事件查
2020-10-07 19:49:01
260
1
原创 LeetCode刷题笔记—48旋转图像
LeetCode刷题笔记—48.旋转图像题目思路代码题目题目思路①首先看到要求说要求原地旋转,因此不能使用辅助数组进行中间过程的存储,但这个要求也提醒了我们可能会使用交换;②普通情况下,我们可以每一轮将最外层的“外壳”进行旋转,然后逐层向内循环,一直到没有内层矩阵为止,这方面的题解很多:逐层递进法③我思考的时候想到矩阵旋转其实本质上就是矩阵的乘法运算,再结合可能使用到“交换”的暗示,平移操作本质就是“交换”,因此凑出来了解决方法。顺时针旋转90°:先左右轴对称交换,然后再以副对角线为中心进行
2020-10-05 17:40:17
154
原创 数据结构—基数排序学习笔记
数据结构—基数排序学习笔记应用场景算法原理复杂度代码应用场景针对数据范围过大(对手机号进行排序),数据不是整型(比如是字符串)的这些特点,计数排序难以进行简单的处理,但可以通过基数排序解决。算法原理这里我们举出身高的例子(手机号的例子实在太长了):请为一组身高进行排序:192 168 131 147 145 189 177 142 172 203首先我们观察到,对于待排序的数据,其在不同位上数字的权重是不一样的(百位>十位>个位),百位上大的数值一定比十位上大的数值来得大。2?
2020-09-30 18:05:35
160
原创 数据结构—计数排序学习笔记
数据结构—计数排序学习笔记应用场景算法原理复杂度代码实现应用场景对数值范围小,且都是整型的数列进行排序,并且有严格的时间复杂度要求(小于O(n * logn)),常使用计数排序。比如我有10亿个数,但这些数都是位于0到10的整型数据,要求时间复杂度严格小于O(n * logn)。算法原理首先我们查看适合计数排序的数据特点:①数据量没有限制,但数值都集中在很小的范围内,比如0~100;②数据类型必须要是整型的,结合特点①即数据取值只有很少的整形范围。假定有20个待排序数列:9,3,5,4,9
2020-09-30 10:35:40
190
原创 数据结构—桶排序学习笔记
数据结构—桶排序学习笔记应用场景算法原理代码应用场景数列取值范围过大,或者不为整数时,不再适用计数排序,升级为桶排序来进行排序。题型:大数据时代:本月某网站播放数量前十的视频,视频数量又多、播放次数差别又大,非常适合桶排序。算法原理类别于计数排序中计数数组的某一个元素,桶排序中的每一个桶代表了一个区间范围,里面可以承载一个或多个元素。桶排序的第一步就是创建这些桶,并确定每一个桶的区间范围。举例:2.2,0.5,5.5,4.24,0.54,3.36 具体创建多少个桶,如何确定桶的区间范围,有很
2020-09-30 08:09:31
253
原创 LeetCode刷题笔记—31下一个排列
No31:下一个排列题目思路思路总结代码题目实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。示例:输入 → 输出1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1思路举一个具体的例子来说明查找的思路,比如:2,5,6,9,7,0。
2020-09-29 21:54:00
144
原创 Java关键字—volatile
Java关键字—volatileJMMvolatile特性JMMJava内存模型简称JMM(Java Memory Model),是Java虚拟机所定义的一种抽象规范,用来屏蔽不同硬件和操作系统的内存访问差异,让java程序在各种平台下都能达到一致的内存访问效果。Java内存模型将内存分为主内存(存放共享变量,比如静态变量、堆内存实例)和工作内存(存放线程需要使用的变量,里面有对共享变量的拷贝)。线程对共享变量的所有操作都必须先在工作内存进行,不能直接改变主内存的变量。不同线程之间也无法访问彼此的工作
2020-09-29 20:55:32
123
原创 2020秋招面试—Java面经
2020秋招面试—Java面经题目题目父线程如何捕获子线程的异常若线程组有异常处理器就使用线程组的异常处理器,若没有就使用全局的UncaughtExceptionHandler,通过回调UncaughtExceptionHandler接口的public void uncaughtException(Thread t, Throwable e) 方法来处理异常。(虽然是在回调方法中处理异常,但这个回调方法在执行时依然还在抛出异常的这个线程中!另外还要特别说明一点:如果线程是通过线程池创建,线程异常发
2020-09-23 12:54:55
574
原创 设计模式—单例模式
设计模式—单例模式什么是单例模式单例模式的实现什么是单例模式一个类对外不提供构造方法,只支持产生一个实例对象,即是单例模式。比如电脑中的回收站,就是典型的单例模式。电脑中所有的文件被删除之后,都会进入回收站里面,而不会创建多个回收站对象存放这些删除的文件。单例模式的使用场景:用于严格要求只能有一个对象实例去进行所有操作的场合,比如常见的工具类,数据库的连接类等就应该被定义为单例类。单例模式的实现单例模式首先是不能向外提供显式可见的构造方法,因此需要将构造方法私有化;此外还需要一个私有属性的类实
2020-09-22 10:08:43
104
原创 设计模式概述
设计模式概述什么是设计模式什么是设计模式设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式都描述了一个在
2020-09-21 09:26:54
83
原创 数据结构—排序算法复习
排序算法复习冒泡排序排序是我们生活中时常会遇到的问题:上体育课会按照从高到低的顺序排列;高考录取会按照分数依次排名。拓展到广义的定义,排序就是:现有 n 个数据 a1, a2, a3, … an ,其具有一个可进行比较的属性 y ,现在需要找到 n 个数据的一种排列 {p1, p2, … pn} ,使其属性 y1 ≤ y2 ≤ … ≤ yn。这样的操作就是排序。常见的排序方法有: 冒泡排序 、 简单选择排序 、 直接插入排序 、 希尔排序 、 堆排序 、归并排序 、快速排序 等。由于排序涉及大量的交
2020-09-19 16:11:40
857
原创 2020秋招笔试—表示年份的子串
2020秋招笔试—表示年份的子串题目思路代码题目小明想从一段英文短文中提取潜在的年份信息,待匹配的年份的范围为1000年至3999年,包含1000和3999,输入一段英文短文,按出现次序输出所提取到的所有可能的年份字符串。示例:输入:And millinaires will hold 46% of total wealth by 2019,the report says.This ratio is likely to increase in 2020.输出:2019 2020思路对字符串求
2020-09-17 22:43:51
481
原创 设计模式—工厂模式
设计模式—工厂模式概述简单工厂模式工厂方法模式概述工厂模式在创建型模式当中比较常用,主要用于创建新的对象,分为三种功能相近的设计模式:简单工厂模式、工厂方法模式和抽象工厂模式。有人可能要问了,我直接写构造方法,自己 new 一个对象不行吗?ClassA a = new ClassA();ClassB b = new ClassB();通常情况下,使用 new 创建新对象是没有问题的,但如果创建对象需要进行一系列复杂的初始化操作,如果将初始化操作写到构造函数中,难以避免地会降低可读性与可移植性。
2020-09-17 13:02:40
91
原创 Java输入输出模板
java字符串输入输出模板题目题目读测试文件txt和控制台输入共存的写法测试文件txt中可以提前准备测试用例,来达到快速测试的目的(控制台输入时间较长,每次测试用例无法保存)。public class Solution { public static void main(String[] args) { Scanner sc; try { File f = new File( "F:\\idea_prj\\Solution\\src\\in
2020-09-17 00:56:15
945
原创 剑指38—字符串的排列
剑指38—字符串的排列 题目思路题目输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串 abc,则打印出由字符 a, b, c 所能排列出来的所有字符串 abc, acb, bac, bca, cab 和 cba。示例:输入:abc输出:abcacbbacbcacabcba思路有要求排序,则需要将字符串所有字符取出来进行排序,再根据排序后的结果选择字符进行组合;...
2020-09-16 22:06:27
137
原创 java非递归实现二叉树遍历
非递归实现二叉树遍历前序遍历:中序遍历后序遍历前序遍历:public List<Integer> preOrder(TreeNode root){ List<Integer> preret = new LinkedList<>(); if(root==null) return preret; Stack<TreeNode> stack = new Stack<>(); while (!stack.
2020-09-16 21:34:44
161
原创 2020秋招笔试—有效字符串
2020秋招笔试—有效字符串题目思路代码题目输入一串字符串,只包含’(’ , ‘)’ , ‘[’ , ‘]’ , ‘{’ , ‘}’ 这六种字符,现要判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例:输入:()[]{}([)]{[]}输出:truefalsetrue思路用栈解决即可,遍历字符串,每次遇到左括号就入栈,遇到右括号则出栈到栈顶弹出对应的左括号;当最终遍历完成后,若栈不为空,则为false;栈为空,则为t
2020-09-16 00:08:38
409
原创 2020秋招笔试—删除重复字符
2020秋招笔试—删除重复字符题目思路代码题目给定一个字符串,需要去除所有之前曾经出现过的字符,只保留第一次出现的字符。描述:输入:hello, welcome to beijing.输出:helo, wcmtbijng.思路要删除已重复的字符,可以在第一次遍历时查询是否重复,而在生成处理后的字符时,需要能快速找到该字符第一次出现的位置,那么可以在第一次遍历时维护一个HashMap<Character,Integer>。第一次遍历字符串时,若当前遍历的字符不在map中,将该
2020-09-15 21:49:29
666
原创 剑指50—字符串中第一次只出现一次的字符
剑指50—字符串中第一次只出现一次的字符 题目思路代码题目给定一个字符串,找出其中只出现过一次的字符位置,如果有多个字符满足条件则输出第一个字符的位置,如果没有满足条件的字符则输出-1。示例:输入:“abaccdeff”输出:1思路维护一个大小为256的数组(常用字符范围为/u0000-/u007f),遍历时对应的数组元素+1。第二次遍历时只需要找出数组中值为1的字符,返回其在字符串中的下标即可。代码public class Solution { public int i
2020-09-15 10:48:30
83
原创 2020秋招笔试—优雅的文章
优雅的文章题目思路代码题目任何一篇仅有英文字母的文章,如果大小写字母数量不相同,会被认为文章不优雅。现在要对给定的文章(即输入字符串)进行修改,使其变得优雅,请确定至少修改多少字符的大小写即可使文章变得优雅。输入的字符串一定是偶数长度的,输出修改次数即可。示例:输入:AAAb输出:1思路这种不确定修改方向,只问修改次数的问题,在遍历时的flag设置成可以向上变化或者向下变化,即可统计修改次数。这里我们可以设置一个计数器cnt,初值为0,假如遍历到大写就cnt++,遍历到小写就cnt–,
2020-09-15 09:58:11
149
原创 2020秋招笔试—复杂异或问题
异或操作题目思路代码题目给定一个序列an,下标从1开始直到n,定义了以下式子:现在要求下式的值:小提示:样例解释:这里考察的是异或操作。思路首先注意到异或是支持交换律的,可将待求解的值分为两个部分:将ai全部交换到一起求出异或值,这是由输入序列确定的部分结果;还剩下一个n×n的余数矩阵,它们整体异或到一起构成输入序列个数确定的部分结果。输入序列的异或结果十分简单,遍历一次输入序列,取出相异或即可,但剩下的余数矩阵如何处理?再次注意到,余数矩阵在列方向上是有周期规律的:第一列是0
2020-09-15 09:07:24
239
原创 剑指51—数组中的逆序对
剑指51—数组中的逆序对题目在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。即输出P%1000000007。示例:输入:1,2,3,4,5,6,7,0输出:7思路逆序对的存在表明数字没有按照顺序排列,因此进行排序的时候将交换次数累计下来即可得到逆序对的数量。但这要求排序算法是稳定,即不会造成多余的交换。三种简单算法:冒泡、简单选择、直接插入都是稳定的排序算法,但它
2020-09-15 00:13:26
78
原创 2020秋招笔试—最大海报面积
最大海报面积—LeetCode.84变体思路代码—LeetCode.84变体题目:输入两个长度为n的数组,分别为n个矩形条的宽和高,现在要在这些矩形覆盖的面积内找到一个最大的矩形面积来张贴海报。说明:输入参数有任何错误和非法数据时,返回0。示例:输入:x=[1,1,1,1,2,1,1];y=[5,2,5,4,5,1,6];n=7输出:16思路本题就是LeetCode.84的变体,比较好的思路就是维护一个单调栈,栈内存储对应的矩形块索引。因此,求解本题需要有几个关键点:建立宽度一致
2020-09-14 23:06:36
279
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人