git版本控制的学习🐱👤 2021-08-30 学习 暂无评论 #git 提交相关 ## git init 初始化仓库 ## git add 添加到暂存区 有两种方式 1. `git add .`把所有更改都提交, 2. `git add <文件名1> <文件名2>`添加指定文件到暂存区 ## git commit -m `git commit -m '提交信息'`提交暂存区的更改 ## git push 把本地仓库提交到远程仓库 #git 分支 - `git branch`查看分支 - `git branch -r` 查看远端分支 - ` git checkout -b <本地分支> origin/<远程分支>` 在本地创建分支,并且指定为哪一个远程分支 - `git branch -D <本地分支>` 删除本地分支 > 删除本地分支不可恢复,其次不能删除当前分支,换言之,要切换到其他分支再删除分支 - `git checkout -b <分支名称>` 如果分支存在则切换,不存在则创建 - `git checkout <分支名称>` 切换本地分支 - `git push --set-upstream <分支名称>`在远程创建分支 > 好像还会自动上传更改,自动执行了commit,并且主分支的提交记录都在 ## 使用情景 > 本地仓库和远程仓库都已经提交,但是所修改的内容不足以构成一次提交,需要**继续修改** 基本流程 1. 本地仓库先撤回到上一个版本 2. 强制push到远端,回退到和本地相同的版本 3. 修改本地,足够一次提交后,再commit 操作 1. `git log` 查询提交历史,找到版本号 2. `git reset --soft <版本号>` 撤回到上一个版本,这里要说的是,只是撤回版本库,实际的代码是不会随着仓库的回退而回退的, 3. `git push origin master --force ` 强制的把master的版本改成当前本地仓的版本,实现回退。 4. 远端和本地都恢复到提交前的状态,修改代码后需要`add .` `commit` `push`等等操作
认认真真学习Vue,从我做起。🦾 2021-08-23 学习 暂无评论 ## v-bind和v-model > v-bind使用在标签上 绑定标签的属性 title、href之类 缩写 ```vue ``` > v-model使用在表单上双向绑定 ``` html ``` ## v-if > 控制表现显示状态 true和false ## v-on和v-once > v-on给标签绑定事件 `v-on:click="handleMessage"` handleMessage写在method中 v-once让数据只渲染一次 ## v-for > 循环当前标签,根据数组来 ```html {{item.text}} ``` ## 基本结构 html 部分 ```html Counter: {{counter}} Message:{{message}} {{innerText}} 反转 {{item.text}} ``` js部分 ``` javascript const Count = { //数据 data() { return { counter: 0, message: "hello vue!", innerText: "", show: false, todos: [ { text: '张三' }, { text: '李四' }, { text: '王五' } ] } }, //绑定的方法 methods: { handleMessage() { this.message = this.message.split('').reverse().join('') } }, mounted() { setInterval(() => { this.counter++ }, 1000) }, }; Vue.createApp(Count).mount('#app') ``` ## 组件 > 子组件中可以用`props:['prop']`来声明属性,父组件可以用`v-bind`来传值给`prop` html部分 ``` html ``` js部分 ```js const app = Vue.createApp({ data() { return { todoItems: [ { id: 1, text: "张三" }, { id: 2, text: "李四" }, { id: 3, text: "王五" }, { id: 4, text: "hello Vue" }, ] } }, }) app.component('todo-item', { //props中的参数在子组件中定义,父组件中v-bind使用 类似于提前占坑 props: ['comptodo'], //props中定义了就可以拿来用 template: `{{comptodo.text}}` }) app.mount('#app') ``` ## computed和methods区别 >1. 调用的时候`{{computed}}` `{{methods()}}` 2. computed有缓存,如果数值没改变是不会重新计算的,methods没有缓存,调用一次计算一次 3. computed返回的是一个值,methods是一个函数,
C# 委托和事件 2021-08-20 C# 暂无评论 ``` c# public delegate void SayHello(string content, string who);//定义委托(决定了参数类型和个数) public static event SayHello sayHelloEvent;//定义SayHello类型的事件 ``` ```c# SayHello dlgSay = say; //定义sayhelllo委托变量,并且绑定一个方法 dlgSay += say1; //给变量再增加一个方法 dlgSay("你好呀", "张三!"); //调用委托变量 这时候say和say1都会执行 SayHello dlgSay1 = delegate (string con, string name) { Console.WriteLine(name + con + "匿名函数"); }; //直接给委托变量绑定一个匿名函数 dlgSay1("nihao", "zhangsan"); SayHello dlg2 = (name, who) => { Console.WriteLine(name + who + "lambda"); };//绑定lambda表达式也可以 dlg2("你好,", "张三"); sayHelloEvent += Program_sayHelloEvent1; //注册事件 sayHelloEvent += Program_sayHelloEvent;//注册事件 //sayHelloEvent -= Program_sayHelloEvent; //注销事件 sayHelloEvent("事件", "事件1");//触发事件 ``` ```c# public static void say(string content, string who) { Console.Write($"{who}" + $"{content}"); } public static void say1(string content, string who) { Console.Write($"{who}" + $"{content}" + "say1"); } //触发事件的时候要执行的方法前提是已经次绑定了 private static void Program_sayHelloEvent1(string content, string who) { //原本应该是他先执行的(确实是先执行的)因为是异步延迟不妨碍后面的事件。 Task.Run(() => { Thread.Sleep(5000); Console.WriteLine(who + content + "我是被触发的事件 Program_sayHelloEvent1"); }); } private static void Program_sayHelloEvent(string content, string who) { Console.WriteLine(who + content + "我是被触发的事件 Program_sayHelloEvent"); } ``` tips: > 个人理解:委托(确定参数类型和个数)可以把方法给串起来,当这个委托变量被执行的时候会按照+=顺序来执行。 事件也是这么回事跟委托差不多,事件是用event修饰的委托,事件执行的时候,也是按照+=的顺序来执行方法(参数类型、个数、静态取决于委托是怎么定义的)
C# ef框架的那些事 2021-08-04 C# 暂无评论 ## 安装EF框架 主要是版本要对应上 1. mysql-for-visualstudio-1.2.9.msi 2. mysql-connector-net-8.0.26.msi 3. 微软的ef框架 4. mysql.data 5. mysql.data.entityframework > 这几个装好就能用了2和5的版本要对上 ## 增删查改 1. 增 ```c# Model.Add(表对象); Model.SaveChanges(); ``` 2. 删 ```c# Model.Remove(表对象);//对象中需要包含主键 Model.SaveChanges(); ``` 3. 改 ```c# var selectItem = Model.表对象.FirstOrDefault(o => o.对象属性 == 条件值); select.表属性=修改后的值; Model.SaveChanges(); ``` 4. 查 > 查有很多中方法 where() Selecte()结合lambda表达式来用 ## 分页 分页一般是点击了当前页数才加载当前的数据,关键点有 1. 一页显示多少个 2. 数据的总数 3. 显示的页数(一般是自动算出来的) ```c# var data = hgqModel.d_it_base_info.Select(o => o).OrderBy(o => o.createDate).Skip(pageinde*count).Take(count).ToList(); ``` > 1. 在使用`Skip()`之前需要先排序这里用的OrderBy() 2. `Skip()`指的是跳过多少个, 公式是 (当前页-1)*一页可以显示的总数 3. `Take()`指的是获取多少个数据 一般就是一页显示的个数 ## 子表查询 > 背景:有两个表a和b,想要查询a表中某个字段和b某个字段相同的记录 tip:要查的是a表的记录,b字段是条件 ```C# nzsc_hgq_2021Entities2 a = new nzsc_hgq_2021Entities2(); var b = a.d_it_base_info.Where( o => o.barCode != o.d_it_detect.FirstOrDefault(x => x.barCode == o.barCode).barCode ).ToList(); ``` ##不关联表查询 > 上面子查询是两个表之间存在外键的情况,但是还有一种情况,两个表不关联,改怎么办呢? ``` c# var total =ef.tab1.Select(o=>o).toList();//总数 var used ef.tab2.Select(o=>o).toList();//已经使用的 return total.Where(o => !used.Exists(t => o.总数的字段.Equals(t.已用的字段))).ToList(); //方法1 可行 return markers.Where(a => maps.Where(t => a.latitude == t.lat).Any()).ToList(); // 方法2 没试 return markers.Where(a => !maps.Where(t => a.latitude == t.lat).Any()).ToList(); //取交集数据,加 '!' 没试 ``` ## 坑坑 1. 加载方式 - ef框架好像有好多中加载方式,定义的实体对象好像不会实施更新,所以每次用到的时候我都会直接再new一个实体
Linux新指令get👍 2021-08-03 Linux 暂无评论 ## 查询文件夹总大小 ``` shell root@OpenWrtForN1:~# du -sh /mnt/mmcblk2p4 1.8G /mnt/mmcblk2p4 ``` > `du` 查询文件夹大小 `-s`可以显示当前文件夹的大小(字节) `-h`可以把字节转换成M,K,G 有时候需要 查看占用,这个指令会很方便 *2021-8-3* ## scp 命令 > 两台Linux之间怎么传输文件😲😲😲 1. 本机往远程复制文件 - `scp [-P 端口{大写大写}] [-r {递归传递文件夹}] [-C {允许压缩}] 本机文件名 用户名@ip地址:远端路径/[这里可以修改文件名 不写则不修改文件名]` 1. 从远程复制文件到本地 - `scp [-P 端口{大写大写}] [-r {递归传递文件夹}] [-C {允许压缩}] 用户名@ip地址:远端路径或者文件名 本机文件名` ## du 命令 2022-02-17 (果然还是忘记了\~\~\~💀💀💀) >显示文件夹的大小 每次用到都要百度,给老子记住!记住!!🤪🤪🤪 1. 展示文件夹的大小 `du -sh /mnt/mmcblk2p4/docker/*` 这个**\***号要带着,不然只会展示当前文件夹的大小 切记哈 *2022-02-17*