最新文章Uniapp实现微信小程序登录
整体流程就是
uniapp调用login方法,指定为微信登录,将用户的授权码(临时票据)发送至后端
后端使用该临时票据,发送请求,请求用户的openid
没办法获取用户信息了,像昵称这种东西只能是用户授权微信登录后自行填写
uniapp代码实现12345678910111213141516171819202122232425262728293031323334uni.login({ "provider": "weixin", "onlyAuthorize": true, // 微信登录仅请求授权认证 success: async function (event) { const { code } = event //客户端成功获取授权临时票据(code),向业务服务器发起登录请求。 console.log('正在请求后端接口,获取openid,code为:', code) const res = await http<strin ...
Vue3+Ts
创建vue3项目不适用vue-cli了,直接上vite
npm create vue@latest
然后选择一些配置项就行了,ts就ts呗
Vue3核心语法setupsetup是vue3中一个新的配置项,值是一个函数,它是Composition Api表演的舞台,组件中所用到的:数据,方法,计算属性,监视等等,均配置在setup中
setup中无法使用this,是undefined
想要只是用一个script,但又想自定义组件名,可以使用这个插件
1npm i vite-plugin-vue-setup-extend -D
然后在vite.config.ts中引入
1234import VueSetupExtend from 'vite-plugin-vue-setup-extend' plugins: [ VueSetupExtend(), ],
setup基本使用
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 ...
uni-app学习笔记
创建项目通过HBuilderX创建直接新建项目,选择vue的版本即可
通过命令行创建拉取vue3+ts的版本:npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project
然后进入项目目录,下载依赖pnpm i(装了个pnpm)
记得加上appId
运行就用:npm run dev:mp-weixin
好好好,难道说我还要学个ts?
那这就学的太多了吧,先看看吧
用Vscode就直接导入就行了
vscode要安装些插件才能用着舒服,然后还要安装一个类型声明文件:
1pnpm i -D @types/wechat-miniprogram @uni-helper/uni-app-types
然后到manifest.json中配置小程序id
到tsconfig.json中加上以下配置,用于语法检查1234567891011121314"types": [ "@dcloudio/types", "@types/wechat-miniprogram", ...
Minio
毕设用Minio搭建一个对象存储服务得了,不用买oss了
docker搭建Minio123456docker run -d -p 9000:9000 -p 9001:9001 --name minio \-e "MINIO_ROOT_USER=root" \-e "MINIO_ROOT_PASSWORD=01020304" \-v /mnt/data:/data \-v /mnt/config:/root/.minio \minio/minio server --console-address ":9001" /data
密码最低八位….,不然启动失败:
minio concole配置文件上传后默认是不会返回url的,但是可以获取临时的访问链接,这个链接最长7天,不符合业务要求,所以可以新增存储桶的规则:
这样就可以直接通过ip:port/bucket/filename来访问了
Springboot整合minio依赖12345<dependency> <groupId>io. ...
BeanUtils注意事项
今天改了一个项目中的bug
简单来说就是关于BeanUtils.copyProperties()的,当属性名一样但是属性类型不一样时,方法不会进行拷贝
项目里就是用了这玩意导致搜索条件没加上
123456789101112131415161718192021 @Test void testBeanUtils() { Test1 t1 = new Test1(); Test2 t2 = new Test2(); /** * 如果要拷贝的某个字段名一样但是类型不一样,则不会拷贝 */ BeanUtils.copyProperties(t2, t1); System.out.println(t1); }@Dataclass Test1 { private String id;}@Dataclass Test2 { // private String id = 10L; private String id = ...
毕设规划
2024年1月11日 12点33分
功能需求部分美食教程小程序应能够满足用户的基本需求
食谱浏览:
分类浏览:按照不同的菜系等分类浏览食谱。
热门推荐:展示热门、受欢迎的食谱。
搜索菜谱
根据菜谱的名字,内容搜索
发布菜谱
菜谱的帖子中要包含文字和图片,图片怎么弄呢?难道还要买个OSS,应该还是要买一个OSS的,不然图片传不上取啊
一个难点在于,菜谱中的图片,传上来,然后怎么确定就在那个位置呢?
一个上传按钮,上传完图片就会在光标位置生成markdown的图片引用,这不就刚刚好了
评论
评论主要是针对菜谱进行的,而这里的菜谱代表的就是帖子,然后菜谱的评论可以嵌套,也就是对评论也可以进行评论
收藏
而收藏,也就是收藏菜谱了
点赞
点赞菜谱
杂谈登录部分设计成什么样的呢?
手机验证码登录
手机号密码登录
微信扫码登录,这个做不了,要认证啥的,很麻烦.
数据库设计user:用户表
id
nick_name
account:手机号
password
avatar_url:头像url
bio:个人简介
create_time
update_time
role_i ...
Collection与Map
集合框架概述数组的特点与弊端特点
数组一旦初始化,长度就已经确定了
数组中的多个元素是依次紧密排列的,有序的,可重复
数组一旦初始化完成,其元素的类型就是确定的,不是此类型的元素,就不能添加到数组中
元素的类型既可以是基本数据类型,也可以是引用数据类型
弊端
数组一旦初始化,长度就已经不可变了
数组中存储数据特点的单一性,对于无序的,不可重复的场景的多个数据就不行了
数组中可用的方法,属性都极少
针对于数组中元素的删除,插入操作,性能较差(尾部添加性能并不差)
Java集合框架体系java.util.Collection:存储一个一个数据
List
存储有序的,可重复的数据
ArrayList
LinkedList
Vector
Set(底层其实就是Map,只使用了Map的键,来保证唯一,不可重复)
存储无序的,不可重复的数据
HashSet
LinkedHashSet
TreeSet
java.util.Map:存储一对一对数据
HashMap
LinkedHashMap
TreeMap
Hashtable
Properties
Collection接口
ad ...
Java比较器
基本数据类型需要比较大小的话,可以直接使用比较运算符,但是引用数据类型是不能直接使用比较运算符来比较大小的
自然排序自然排序Comparable
如果数组中是基本数据类型的比较
12345678@Testpublic void test1() { String[] arr = new String[]{"Tom", "Jerry", "John", "Atom", "Bomb"}; Arrays.sort(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }}
就能够使用Arrays.sort()来进行正常的排序
如果数组中的是引用数据类型,就会报错
1234567891011121314@Testpublic void test2() { Product[] arr = n ...
JVM面经
JVM相关面试题1 JVM组成1.1 JVM由那些部分组成,运行流程是什么?
难易程度:☆☆☆
出现频率:☆☆☆☆
JVM是什么
Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境)
好处:
一次编写,到处运行
自动内存管理,垃圾回收机制
JVM由哪些部分组成,运行流程是什么?
从图中可以看出 JVM 的主要组成部分
ClassLoader(类加载器)
Runtime Data Area(运行时数据区,内存分区)
Execution Engine(执行引擎)
Native Method Library(本地库接口)
运行流程:
(1)类加载器(ClassLoader)把Java代码转换为字节码
(2)运行时数据区(Runtime Data Area)把字节码加载到内存中,而字节码文件只是JVM的一套指令集规范,并不能直接交给底层系统去执行,而是有执行引擎运行
(3)执行引擎(Execution Engine)将字节码翻译为底层系统指令,再交由CPU执行去执行,此时需要调用其他语言的本地库接口(Native Method L ...
并发编程面经
文档说明
在文档中对所有的面试题都进行了难易程度和出现频率的等级说明
星数越多代表权重越大,最多五颗星(☆☆☆☆☆) 最少一颗星(☆)
Java多线程相关面试题1.线程的基础知识1.1 线程和进程的区别?
难易程度:☆☆
出现频率:☆☆☆
程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的。
当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
一个进程之内可以分为一到多个线程。
一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行
Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。在 windows 中进程是不活动的,只是作为线程的容器
二者对比
进程是正在运行程序的实例,进程中包含了线程,每个线程执行不同的任务
不同的进程使用不同的内存空间,在当前进程下的所有线程可以共享内存空间
线程更轻量,线程上下文切换成本一般上要比进程上下文切换低(上下文切换指的是从一个线程切换到另一个线程 ...