1.在D盘新建文件夹SSH.ssh。
2.在Vscode中打开settings,找到Extensions->Remote-SSH,将config文件设置为下列路径可以解决问题。
参考 https://blog.csdn.net/u011436427/article/details/102981641
空指针异常问题多半是Integer自动拆箱时出错
报错代码:
Integer a=null; if(a==1||a==null){ System.out.println("111"); } 报错:java.lang.NullPointerException
报错原因: Integer对象为Null,在自动拆箱过程中obj.xxxValue,会抛出NullPointerException
问题解决: 如果想继续多条件判断,要将判断为空放在首位
修改代码:
Integer a=null; if(a==null||a==1){ System.out.println("111"); } 要想避免再出现类似空指针异常错误,需要掌握java中null的相关知识,可以参考另一文章 java中关于null应知应会
转载请标明出处:http://blog.csdn.net/donkor_/article/details/120748738
前言:
最近Fultter版本Android端的工作逐渐趋于稳定,开始了Flutter版本IOS端上架的工作。然后打开XCode,运行。好家伙,上来就直接编译失败。但是明明Android编译运行没有任何问题啊。
▲ 错误提示:
▲ 问题思考:
从上述图片可以看出,出现这个错误是Flutter系统的头文件找不到。根本原因是这个文件就没同步到,在你的mac中对应的项目中找不到这个头文件,整个Flutter Framework中的Head文件丢失。
▲ 解决方案:
1. 删除 ios/Flutter/Flutter.podspec terminal命令行: rm ios/Flutter/Flutter.podspec 2. flutter clean 3. 重新编译运行你的APP 最后测试结论:解决 ヾ(◍°∇°◍)ノ゙
▲ 更多解决方案及参考:
https://stackoverflow.com/a/65577277 About me
Email :donkor@yeah.net
Android开发交流QQ群 : 537891203
问题原因:对某行添加注释后导致括号不匹配
解决方法:检查
SPOJ3734 PERIODNI 洛谷题目传送门
给定一个N列的表格,每列的高度各不相同,但底部对齐,然后向表格中填入K个相同的数,填写时要求不能有两个数在同一列,或同一行,下图中b是错误的填写,a是正确的填写,因为两个a虽然在同一行,但它们中间的表格断开。
输出所有填写方案数对1 000 000 007的余数。
解题思路 这道题是加在笛卡尔树作业里的,那就是和笛卡尔树有关的
先考虑一种简化情况
如果是正方形,填n个数,那么第一行有n种,第二行有(n-1)种
一共有 n ! n! n!种填法
如果是矩形,长n,宽m,填k个
那么可以想成选k行,选k列,然后转化为情况一
方案数 C n k C m k k ! C_n^kC_m^kk! CnkCmkk!
现在考虑这个题
建出笛卡尔树,设 F [ i ] [ j ] F[i][j] F[i][j]表示在 i i i的子树中放置 j j j个数的方案数(不包含自己)
设 f [ j ] f[j] f[j]表示在 i i i的子树中放 j j j个数的方案数(不包含自己)
f [ i ] = ∑ j = 0 s i z [ l s o n [ x ] ] F [ l s o n [ x ] ] [ j ] × F [ r s o n [ x ] ] [ i − j ] f[i]=\sum_{j=0}^{siz[lson[x]]}F[lson[x]][j]\times F[rson[x]][i-j] f[i]=j=0∑siz[lson[x]]F[lson[x]][j]×F[rson[x]][i−j]
git pull解决no tracking information问题 点击以下链接跳转到原文:
http://www.onlycalm.cn/docs/Git/git pull解决no tracking information问题/
文中功能实现代码来自B站Up主我是一只好蛋YEAHUE4 C++小功能教程系列-P5 调取Windows文件管理器播放视频_哔哩哔哩_bilibili解决方法文章原文链接UE4 Shipping下打开系统窗口崩溃问题 附插件下载地址_u011718663的博客-CSDN博客 为笔记用来做一点补充
原文中插件怎么用第二步替换完模块名称以后
#include "MyBlueprintFunctionLibrary.h" #include "DesktopPlatformEx/Public/IDesktopPlatformEx.h" #include "DesktopPlatformEx/Public/DesktopPlatformModuleEx.h" bool UMyBlueprintFunctionLibrary::OpenWindowsMovie(TArray<FString>& FilePath) { FString ExtensionStr = "."; IDesktopPlatform* DesktopPlatform = FDesktopPlatformModuleEx::Get(); bool bOpen = DesktopPlatform->OpenFileDialog(nullptr, TEXT("选择文件"),FPaths::ConvertRelativePathToFull(FPaths::ProjectDir()), TEXT(""), *ExtensionStr,EFileDialogFlags::None, FilePath); if (!bOpen) { return false; } else { return true; } return false; } 要包含修改过名称的头文件
#include "DesktopPlatformEx/Public/IDesktopPlatformEx.h"
#include "DesktopPlatformEx/Public/DesktopPlatformModuleEx.h"
然后如原文一样将FDesktopPlatformModule::Get()替换成FDesktopPlatformModuleEx::Get()即可编译成功
最后贴一下.h和.Build.cs
#pragma once #include "CoreMinimal.h" #include "Kismet/BlueprintFunctionLibrary.h" #include "MyBlueprintFunctionLibrary.generated.h" /** * */ UCLASS() class OPENVIDEOTEST2_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() public: UFUNCTION(BlueprintCallable) static bool OpenWindowsMovie(TArray<FString>& FilePath); }; using UnrealBuildTool; public class OpenVideoTest2 : ModuleRules { public OpenVideoTest2(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.
大家都知道笔记本电脑屏幕有点小,喜欢弄点外设接一下。最近用显示器接在笔记本上面,发现没有声音。以下设计过程。
右键打开以下 选择设置
将显示器的播放给禁止了,笔记本就可以放出声音了
1. 问题 登录时,填写错误的用户名密码,没有错误提示(没有进入catch分支)获取ajax的返回结果比较麻烦:res.data.data.xxxx 2.解决登录失败不报错的问题 2.1 分析原因 首先 axios 内部的报错机制:
如果本次请求得到的响应的状态码 不是 2 开头的(如:400,500),就会主动抛出错误。如果本次请求出现网络错误,就会主动抛出错误 但当用户用户名和密码输入错误时,本次请求的状态码是正常的(虽然 success 字段是false),也没有网络错误,所以axios并不会报错
2.2 解决思路 在响应拦截器中,根据本次请求返回的数据中的 success 字段值,来决定是否主动抛出错误。
这个错误处理,是和后端进行了约定
// 响应拦截器 service.interceptors.response.use(response => { if (response.data.success) { // 数据正常,进行的逻辑功能 return response } else { // 如果返回的 success 是 false,表明业务出错,直接触发 reject // 抛出的错误,被 catch 捕获 return Promise.reject(new Error(response.data.message)) } }, error => { // 对响应错误做点什么 return Promise.reject(error) }) 3. 解决获取有效数据代码冗余的问题 3.1 问题说明 观察api的返回结果,我们发现axios在处理接口返回值时,默认会自动给包裹一个data字段,这导致我们每次在业务模块获取数据都需要写res.data.data.xxxx,这样太麻烦了。
3.2 解决思路 在返回有效数据时,直接返回res.data
// 响应拦截器 service.
每天凌晨2点 0 0 2 * * ?和每天隔一小时 0 * */1 * * ?
例1:每隔5秒执行一次:*/5 * * * * ?
例2:每隔5分执行一次:0 */5 * * * ?
在26分、29分、33分执行一次:0 26,29,33 * * * ?
例3:每天半夜12点30分执行一次:0 30 0 * * ? (注意日期域为0不是24)
每天凌晨1点执行一次:0 0 1 * * ?
每天上午10:15执行一次: 0 15 10 ? * * 或 0 15 10 * * ? 或 0 15 10 * * ? *
每天中午十二点执行一次:0 0 12 * * ?
转自量子位,作者赖可
GitHub 不仅可以传代码,还可以建博客。利用 GitHub Pages 平台,就可以搭建非常好用的个人博客。
但是难点在于,你在要敲很多代码才能搭出一个博客。对于小白和新手来说,太不友好。
没关系!现在不用写代码也可以了。
不需要敲码,不用写使用命令行,可以自定义主题,还能有自己的域名。
Fast.ai 提供了模版,只要注册一个 github 账号,小白就能够完成搭建博客的操作。
真是文科生友好~
下面是小白教程。
创建存储库 & 创建主页 首先,你需要注册一个 github 账号,并确保在线。
然后,点击这个网页地址:https : //github.com/fastai/fast_template/generate
注册一个存储库 (repository),就是存储博客的地方。注册名字的格式是: github 上的名字 + github.io;储存库的性质选择 公共 Public。
如果选择 Private 就是仅自己可见,这样需要付费
下面就可以进行博客主页的一些基本设置。
进入主页,会看到的是一个名字为 index.md 的文件,这是个 Markdown 文件。Markdown 是一个目前创建格式化文本的便捷又强大的方法。在输入普通文本的时候,只需要加入一些特定字符就可以增加特定的样式。比如在一个一个词或者短语前后都输入 *,就可以使其变成斜体。
单击这个文件打开它,进入新的页面,点击编辑按钮,即铅笔符号开始编辑。
点击 Preview changes 可以浏览文本效果
△blog 被设置成斜体 滚动到底部并单击 Commit changes 绿色按钮来提交。在 GitHub 上,“提交” 意味着将其保存到 GitHub 服务器。
博客的域名就是,**github 上注册的名字 + github.io,页面就会显示刚才输入的内容。
还可以对博客进行其它设置,单击名为_config.yml 的文件,然后像之前一样单击编辑按钮,在冒号后面输入相应的内容,可以更改标题,描述和 GitHub 用户名值。输入的内容就会在主页显示。
写文章 下面可以写博客文章了!
一、qemu(server端)启动Linux内核,带上-S -s选项
qemu-system-x86_64 -m 1024\ -nographic $SMP -kernel arch/x86/boot/bzImage \ -append "noinintrd console=ttyS0 crashkernel=256M root=/dev/vda rootfstype=ext4 rw loglevel=8" \ -drive if=none,file=rootfs_debian_x86_64.ext4,id=hd0 \ -device virtio-blk-pci,drive=hd0 \ -netdev user,id=mynet\ -device virtio-net-pci,netdev=mynet\ --fsdev local,id=kmod_dev,path=./kmodules,security_model=none \ -device virtio-9p-pci,fsdev=kmod_dev,mount_tag=kmod_mount\ -S -s 二、vscode端(client端)的json文件配置(qemu运行x86)
{ "version": "0.2.0", "configurations": [ { "name": "kernel-debug", "type": "cppdbg", "request": "launch", "miDebuggerServerAddress": "127.0.0.1:1234", "program": "${workspaceFolder}/vmlinux", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "logging": { "engineLogging": false }, "MIMode": "
apt命令安装MySQL, 过程中没有设置root密码。 安装完成后,无法登录root,因此修改root密码。
1、设置免密登录
修改文件/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]这一块中加入skip-grant-tables这句话。
修改后重启服务生效,systemctl restart mysql.service
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] # # * Basic Settings # user = mysql ... max_binlog_size = 100M # binlog_do_db = include_database_name # binlog_ignore_db = include_database_name skip-grant-tables 2、登录root用户mysql -uroot -p,这个时候直接回车,不要密码。
3、修改root密码
use mysql; ALTER user 'root'@'localhost' IDENTIFIED BY '123456'; flush privileges; 修改完后,退出就能用root新的密码登录了。 然后打开/etc/mysql/mysql.conf.d/mysqld.cnf文件把skip-grant-tables删除。修改后重启服务生效,systemctl restart mysql.service。
PS:
步骤3,如果碰到以下报错,则先执行flush privileges;命令。
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '123456'; ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 如果碰到以下报错。
网上寻找的方法,经测试可以用
1 scrollbar-color: transparent transparent pc端滚动条隐藏 2 scrollbar-width: none; 隐藏移动端滚动条 以下是网上找的方法,自己测试不能用,不知道其他人是怎么个情况
-ms-overflow-style: none; scrollbar-track-color: transparent !important; -ms-scrollbar-track-color: transparent !important;
题目1:JZ3 从尾到头打印链表 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { //std::cout<<"head:"<<"value"<<head->val<<std::endl; //std::cout<<"nex"<<head->next->val<<std::endl; ListNode* temp_head=head; vector<int> result; // 对初始第一个数据进行判断 if(temp_head==NULL) { std::cout<<"result"<<std::endl; return result ; } else { std::cout<<"ddd"<<std::endl; while(temp_head!=NULL) { std::cout<<"value:"<<temp_head->val; int num=temp_head->val; result.push_back(num); temp_head=temp_head->next; } } //利用迭代器进行翻转 // vector<int>::reverse_iterator riter; // for (riter=result.rbegin();riter!=result.rend();riter++) // { // result_rever.
二叉树的结点类 class Node { public: Node() = default; Node(int data) : _data(data), _lchild(nullptr), _rchild(nullptr) {}; public: char _data; // 数据域以 char 型为例,严谨点可写成模板 Node* _lchild; // 指向左孩的指针(左右孩也是一个Node) Node* _rchild; // 指向右孩 }; 二叉树的建立 // 递归建立二叉树,但是这个建完了 T 就不指向根节点了,暂未解决 // 已解决,void CreatBT(Node* T) ---> void CreatBT(Node* &t); 但是为什么这样可行还需要思考一下!!! // 这里用引用传递的方式,目的是保留原有的根节点指针指向不受影响 void CreatBT(Node* &root) { char ch; cout << "请输入结点中存放的数据:"; cin >> ch; if(ch == '#') { root = nullptr; } else { root = new(Node); root->_data = ch; CreatBT(root->_lchild); CreatBT(root->_rchild); } } 先序遍历二叉树 // 先序遍历二叉树 void preOrderTraverse(Node* root) { if(root == nullptr) {} else { cout << root->_data << "
在使用foreach循环中,嵌套if条件跳出continue,代码会报错,可以将continue改成return true 如果是break,则改成return false
缩短键值对的存储⻓度;
在 key 不变的情况下,value 值越⼤操作效率越慢,因为 Redis 对于同⼀种数据类
型会使⽤不同的内部编码进⾏存储,⽐如字符串的内部编码就有三种:int(整数编码)、raw(优化内存
分配的字符串编码)、embstr(动态字符串编码),这是因为 Redis 的作者是想通过不同编码实现效率和
空间的平衡,然⽽数据量越⼤使⽤的内部编码就越复杂,⽽越是复杂的内部编码存储的性能就越低。
这还只是写⼊时的速度,当键值对内容较⼤时,还会带来另外⼏个问题:
内容越⼤需要的持久化时间就越⻓,需要挂起的时间越⻓,Redis 的性能就会越低;
内容越⼤在⽹络上传输的内容就越多,需要的时间就越⻓,整体的运⾏速度就越低;
内容越⼤占⽤的内存就越多,就会更频繁的触发内存淘汰机制,从⽽给 Redis 带来了更多的运⾏负
担。
因此在保证完整语义的同时,我们要尽量的缩短键值对的存储⻓度,必要时要对数据进⾏序列化和压缩再
存储,以 Java 为例,序列化我们可以使⽤ protostuff 或 kryo,压缩我们可以使⽤ snappy。
使⽤ lazy free(延迟删除)特性;
lazy free 特性是 Redis 4.0 新增的⼀个⾮常使⽤的功能,它可以理解为惰性删除或延迟删除。意思是在
删除的时候提供异步延时释放键值的功能,把键值释放操作放在 BIO(Background I/O) 单独的⼦线程处
理中,以减少删除删除对 Redis 主线程的阻塞,可以有效地避免删除 big key 时带来的性能和可⽤性问
题。
lazy free 对应了 4 种场景,默认都是关闭的:
2171 lazyfree-lazy-eviction no
2 lazyfree-lazy-expire no
3 lazyfree-lazy-server-del no
4 slave-lazy-flush no
它们代表的含义如下:
lazyfree-lazy-eviction:表示当 Redis 运⾏内存超过 maxmeory 时,是否开启 lazy free 机制删
荣耀社招笔试题纪录篇 原文链接荣耀社招笔试题
十一放假回家参加了荣耀社招笔试,两道算法题,解析仅供参考
第一题:旋转矩阵 题目描述:
给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请
你设计一种算法,将图像旋转 90 度。不占用额外内存空间能否做到?
示例 1: 给定 matrix = [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入矩阵,使其变为: [ [7,4,1], [8,5,2], [9,6,3] ] 示例 2: 给定 matrix = [ [ 5, 1, 9,11], [ 2, 4, 8,10], [13, 3, 6, 7], [15,14,12,16] ], 原地旋转输入矩阵,使其变为: [ [15,13, 2, 5], [14, 3, 4, 1], [12, 6, 8, 9], [16, 7,10,11] ] 分析 作为数学系出生的学生,对矩阵的操作应该有所印象,本题的本质在于考察对于矩阵的基本运算能力,例如矩阵转置、内积、点积以及矩阵的迹、特征值和特征向量等等,这是解决本题以及类似题的关键,也是刷题过程中从仅仅刷题到总结经验的思考过程,发现自己目前欠缺的正是这个思考过程。
题目一出,真是几家欢喜几家愁,那些复习得好的,自然可以款款而谈,可是那些本身基础就薄弱的弟子,立刻尴尬地说不出话来。甚至有的弟子已经举双手表示要放弃比赛。这些举动立刻引来了场外那些大弟子的哄笑。尤其是其他院的弟子,更是偷来睥睨的目光。
林元青见此,暗叹一声,却是没有特别失落。根据往年的经验,青山院的弟子生源都是最差的,学得好的人更是凤毛麟角。在这一点上,青山院的弟子行走在宗门,也总是要比别人地上一头。
“哈哈,不愧是吊车尾的青山院,今年果然还是老样子,运算符这么简单的东西,都能难住这么多人。”
“就是啊,不过是运算符罢了,我看啊,青山院迟早退出内门,成为外门院系吧。”
第一场,是叶小凡和一个同门弟子之间的对决。
“快看,那个叫做叶小凡的,据说是才入门不久,依我看呐,运算符虽然简单可也不是这样一个刚入门的愣头青能够理解的。”
“就是啊,这不,他现在的脸色可真是要多难看有多难看啊,哈哈。”
没有理会这些流言蜚语,叶小凡眉头紧锁。这倒不是说运算符这么简单的基础他不会,而是因为叶老这个BUG级的老家伙存在,平时没少给叶小凡灌输一些比较深奥的功法和概念。因此,哪怕只是简简单单的运算符,叶小凡也在好好思忖该如何去概述。就在这时,对面传来了一阵傲慢的声音。
“嗨,你就是那个什么叶小凡吧,算你运气不好,碰上本大爷我。我可告诉你,JavaScript基础功法中,可没有什么功法可以难得住我的。所以,我劝你啊,早点认输投降吧。我看你对运算符也不是特别熟悉,何必在这丢人现眼呢,哈哈哈!”
叶小凡抬头一看,只见一个和自己年龄相仿的少年,已经开始自信地解释起来。
“JavaScript运算符,无非加减乘除和赋值运算,何难只有?赋值运算符用于给 JavaScript 变量赋值。比如我现在有一个变量,var a; 那么这个变量的值就是undefined,因为没有定义嘛。然后,我当然需要给它赋值咯。赋值的方法,就是用=号,把真正的值用=号赋给它,这个就叫做赋值。加减乘除,自然不用多说,不就是最简单算数嘛。比如说,我有两个变量,先用赋值运算符给它们赋值,然后计算加减乘除。这样吧,我写一段代码就全清楚了。”
var a = 10; var b = 2; var s1 = a + b; var s2 = a - b; var s3 = a * b; var s4 = a / b; “叶小凡,这段代码你能看得懂吗,我想你也是看不懂的吧。好了,本大爷我就大发慈悲,跟你解释下好了。”
林元青注视着这一切,没有多说话,根据演武场的规则,比赛双方切磋技艺,可以互相跟对象提问题,然后根据双方的作答情况和问题的质量,由评审团打出一定的分数。
“老林啊,看来这个弟子基础还可以啊,而且还很自信啊。想必这应该就是你们院的最高水准了吧”说话的是绿水院的掌尊-尹曾琪,平时和林元青关系不太好,常常喜欢冷嘲热讽。林元青笑了笑,并不答话。
“叶小凡,你可听好了,我就说一遍而已。因为a=10,b=2,所以两者加起来就是12。所以,s1等于12错不了。a-b=8, a*b=20, 最后是除法,10除以2自然是等于5啦。”
“好,现在轮到我说了。你方才讲得是自然不错,但是除了加减乘除,还有三个运算符没有说到。”叶小凡淡淡地说到。
“什么,那你说说还有什么运算符?”对面弟子不可置否地说到。
“首先是取余数的运算符 — ‘%’,取余数的意思就是一个数字除以另一个数字,除不尽的部分就是余数。比如5除以2,得到的结果就是2.5。当然,0.5是小数了,既然要取余数,自然就不能写成小数形式。5除以2,能够被整除的就是2(5=2x2+1),余下来1。因此,余数就是1。还有一种情况,小的数字除以大的数字,一个都不能被整除,比如2除以5,那么余数就是2本身。”
“啊,啊,是的,我正想要说呢,还有取余运算符。”
“除了取余运算符,还有自增运算符还有自减运算符。自增运算符是++,自减运算符是–。顾名思义,自增和自减运算符可以使得当前的变量自增一个单位或者自减一个单位。这里有一个需要注意的点,不管是自增运算符还是自建运算符,都分为两种。比如有这样一个例子。”
var a = 10; var b = a++; console.log(b); 这样写,得到的结果你猜等于几。