- 博客(28)
- 收藏
- 关注
原创 嵌入式开发常用方法
// 数字字符串转数字float toNumber(char amount[]) { char i = 0; char j = 1; float res = 0; float float_sector = 0; char isFloat = 0; while(amount[i] != '\0') { if(amount[i] == '.') { isFloat = 1; i++; break; } printf("%d\r\n", amount[i]-48);
2022-04-30 00:49:12
295
原创 RFID RC522遇到的问题
网上资料很多,16个扇区,第0扇区的第一块存的是厂家代码。每个扇区的第三块是控制块,其余都可使用。我遇到了一个场景,就是我需要写多个数据到卡内。比如姓名、手机号、温度等我看到了一句话,在读写某个扇区之前需要验证密码。这句话其实很关键PcdAuthState( PICC_AUTHENT1A, 5, KeyValue, ucArray_ID );//校验密码 第二个扇区 // 进行第二个扇区操作PcdWriteString(name_addr, _name);PcdWriteString(ident
2022-04-27 21:26:24
807
2
原创 C语言处理JSON数据(仅供参考)
使用方法参考下面程序#include<stdio.h>#include "string.h"// 根据键获取值 char * getValueByKey(char *str, const char *key, char value[]) { char start = 0; char end = 0; while(str[start] != ':') { start++; } end = start + 1; while(str[end] != ',' &&am
2022-04-24 01:31:57
3491
1
原创 嵌入式学习
1.static的作用首先,在函数里面定义一个static变量,那么这个变量将和全局变量一样放在静态存储区,在整个函数的执行中,该变量的值不变。也就是它使变量的生命周期变长了。void test() { static int a; printf("%d", a); a = 1; printf("%d", a);}int main() { test(); test(); return 0;} // 输出 01110是因为static声明会将变量初始化为0x00而第三个1是因为只
2022-04-06 00:11:49
138
原创 前端面试(一)
1.了解过react 或 angular 吗Vue借鉴了react的虚拟dom技术和react的组件化 借鉴了angular的数据绑定技术和模板Vue:渐进式的js框架,核心库加插件(如Vue-router)特点:MVVM模式,M:model,V:view, VM:viewmodelViewModel能够观察到数据的变化,并对视图对应的内容进行更新...
2022-03-10 10:57:52
741
原创 JS基础知识(一)
1.必须传参的函数function test(x = x) {return x}如果不传参,括号里面的x就是没定义,会报没定义的错2.对象的valueOf函数当你这么玩的时候:1 + { valueOf() {return 1} } 此时右边这个对象会调用valueOf方法进行数字转换所以答案是23.forEach 如果数组的某个元素为空他会跳过那次循环 比如var i = 0[1,2, ,4].forEach((item, index) => {i++}) // 34.
2022-03-09 19:23:36
196
原创 设计模式(二)
策略模式定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换(算法被封装在一个策略类的内部方法里,在用户对环境类请求时,环境类将请求交给对应的策略对象去计算)在策略模式中,创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。假设现在有个游戏在卖武器。武器分为多个级别,比如青铜,黑铁,白银,黄金等假设你接手了这个游戏的武器售卖业务,现在要开发一个售卖系统,其中一个功能就是根据武器底价和武器级别计算价格 于是你写下了如下代
2022-03-05 21:37:54
2698
原创 Javascript引擎运行机制
搞清楚JS是怎么跑起来的,很多问题将迎刃而解。进程:CPU分配资源的最小单位线程:CPU调度资源的最小单位一个应用程序可能包含多个进程,当一个应用程序被启动时,一个进程就被创建了,操作系统会为它分配内存。这个进程还可能向操作系统申请另一个进程。两个进程使用进程间通信方式通信。而且,假如其中一个进程挂了,而其他进程还在正常工作时,它又会重启。一个进程可以拥有多个线程,它们各自完成自己的任务。为什么要说这个,因为浏览器一般都是多进程的。而为什么要讲浏览器,因为它是一个js的运行时环境。先说浏览器。以
2022-03-05 14:45:35
490
原创 JS this指向问题
1.函数的this指向是谁调用就指向谁全局下的函数(window)function test(){ var s = 's' console.log(this.s)}test() // undefined因为此时 test()等价于 window.test() 所以this指向了window window.s自然是undefined对象的函数var o = { test: function() { console.log(this.s) }, s: 's'}o.test()
2022-03-05 01:13:32
98
原创 JS 作用域和作用域链、执行栈和执行上下文的关系
执行上下文的生命周期包括三个阶段:创建阶段→执行阶段→回收阶段。执行上下文它分为:1.全局上下文。打开浏览器,你就已经将全局上下文压进了执行栈。所以全局上下文永远位于执行栈的栈底,只有当你关闭浏览器,他才会出栈2.函数上下文。当执行一个函数时,进入了创建阶段:1.创建变量对象:首先初始化函数的参数arguments,提升函数声明和变量声明。2.创建作用域链3.确定this指向其中第2步创建了作用域链。作用域链的目的,就是让当前上下文能够访问到执行栈中在它下面的其他上下文,如全局上下文。作用域
2022-03-05 00:27:10
225
原创 前端设计模式(一)
单例模式:保证创建的对象是唯一的:如果已经创建直接返回 反之创建先上使用方法var a = new Single('tom')var b = new Single('john')console.log(a === b) // truevar Single = function(name) {this.name = name}显然这样创建是不对的 作出如下调整var Single = function(name) { if(instance) return instance; insta
2022-03-03 23:12:49
186
原创 前端算法(一)
数组常见方法:concat() 连接两个或多个数组 并返回结果let arr1 = [1,2];let arr2 = [1,2];arr1.concat(arr2);every() 对数组的每一项运行给定函数 如果该函数对于每一项都返回true,则返回true 否则 falselet names = ['abc', 'cd','ac']; // 可以通过every() 判断数组每一项是否包含某个字符 let flag = names.every(function (t) { ret
2022-03-03 20:21:57
95
原创 手写promise(二)
onFulfilled 和 onRejected 必须作为函数调用then() 也许会在同一个promise中调用多次 - 当promise变为完成态,所有相关的onFulfilled回调都被执行,且是按照回调函数注册的顺序执行 - 当promise变为拒绝态,所有相关的onRejected回调都按注册顺序执行then必须返回一个promise: promise2 = promise1.then(onFulfilled, onRejected) - 如果 onFulfilled 或者 onReje
2022-03-03 17:31:45
165
原创 手写promise(一)
Promise为JS的异步编程提供了一种解决方法JS异步编程的方式还有:1.发布订阅模式2.回调函数3.事件监听先看下回调函数怎么实现异步编程回调函数:函数当作参数进行传递, 当满足一定条件时,这个函数被执行回调函数并不会马上被执行。它会在包含它的函数内的某个特定时间点被“回调”(就像它的名字一样)模拟请求数据,当拿到数据后,打印出来这里的回调就是打印function showData(data) { console.log(data)}function getData(cb) {
2022-03-02 20:16:02
173
原创 手写浅拷贝和深拷贝
引用类型的名存储在栈内存中,值存在堆内存中 栈内存的名存储着堆内存的地址 var a = {name: 'hello'}var b = a // b拿到的是对象a的堆内存地址console.log(a.name) // hellob.name = 'hi'console.log(a.name) // hi浅拷贝:对象B拷贝对象A,对象A改变,对象B跟着改变浅拷贝的方式:1.上面提到的 var b = a 是一种这种方式是彻底的浅拷贝2. for in 循环 浅拷贝这种方式的浅拷贝
2022-03-02 13:02:10
152
原创 JS 内存泄漏
什么是内存泄漏已经没有使用的内存没有被及时释放 导致该段内存无法使用内存泄漏的原因无法通过js访问该段内存,且垃圾回收机制以为该段内存还在使用常用的垃圾回收机制引用计数法var obj = {}计数: {obj: 1}var obj1 = obj计数: {obj: 2}obj = 1计数: {obj: 1}obj1 = 2计数: {obj: 0}垃圾回收机制 清除该对象var arr = [1,2,3]arr = null // 释放内存浏览器端内存是否泄漏的方法打开开
2022-03-01 23:00:07
98
原创 js 继承方式(一)
js 继承 分为 原型继承、组合继承、寄生组合继承、es6的extend---------------------------------------------------原型继承1.父类的实例作为子类的原型2.缺点:子类的实例对象共享了父类的构造函数的引用属性function Person() { this.name = "tom" this.money = { consume: 100, deposit: 10000 }}function Student() { thi
2022-03-01 22:21:14
89
原创 JS节流和防抖
-----------------------------------------------------为按钮绑定操作var btns = []for(var i = 0; i < 3; i++) { btns[i] = function() {console.log(i)} }console.log(btns[0]()) // 3// 闭包var btns = []for(var i = 0; i < 3; i++) { // 立刻执行 返回函数 i的值被闭包了 b
2022-03-01 20:33:35
128
原创 JS new操作符
手写 newfunction mynew(fn) { var obj = {} obj.__proto__ = fn.prototype var args = Array.from(arguments).slice(1) console.log(args) var res = fn.call(obj, ...args) return res instanceof Object ? res : obj // res == null 或者 undefined 则返回obj}// 测试func
2022-03-01 18:30:32
141
原创 手写call和apply
------------------------------------------------------------------------手写call 先看下call的使用,通过 call()方法可以使用另一个对象的方法var person = { //sayhello: () => { console.log('hello', this.name) } sayhello: function() { console.log('hello', this.name) }}var p1
2022-03-01 17:34:43
215
原创 前端面试(一)
1.数据类型有基本数据类型,特点较为简单,所以存储在栈里,有:Number, String, null, undefined, bool, Symbol还有引用数据类型,比较复杂,所以放在堆里,但为了能找到,还需在栈里存放它的地址。有:Function,Object, Array, Date, 正则表达式栈内存自动释放,堆内存则不会,依靠垃圾回收机制回收,如果不用,最好将使用完的对象设为null2.闭包假设有两个函数,F1, F2 F1中包含F2, F1里面还有个变量dog,这个变量被F2
2021-09-11 11:22:41
802
原创 云班课资源自动下载详细教程
云班课资源自动下载详细教程爬虫其实是个挺好的东西,我们可以利用它帮助我们学习,利用它进行资源搜集,然后通过分析数据可以帮我们更好的了解一些我们不知道的东西。比如可以将考研单词本中的单词和历年真题出现的单词进行匹配,看下哪些单词是真的高频出现…实现思路:1.请求url内容,即是获取网页源代码(html)2.筛选我们需要的内容,即是资源链接和资源名称3.下载并存储到本地路径Ⅰ.准备好环境第一步,我们需要获取网页的源代码,怎么获取?这个获取的方法就不用我们操心了,早就有大佬为我们写好了这些方法,py
2021-02-10 23:47:45
8379
原创 复习下js的零碎知识点
prototype属性****************************************************************var x = 1;console.log(this.x); // 1 全局的console.log(window.x); // 1****************************************************************基本类型:string number boolean null undefined b
2020-06-23 12:13:40
111
原创 html 和 css 简单地实现一个好看的登录页面
**html 和 css 实现一个好看的登录页面**话不多说,直接上代码<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> /* 清除默认样式 同时给所有...
2020-04-10 22:44:04
7101
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人