19.10.14
getchar() 返回的值是ASCII码
((American Standard Code for Information Interchange): 美国信息交换标准代码)
https://blog.csdn.net/wenpeng_lu/article/details/70308101----名不副实的getchar()
getchar() 用于处理前面输入后的回车符的问题,即很多时候会有回车键滞留在输入流上
getchar() 将系统暂停一下
————————————RSS订阅(Really Simple Syndication,简易信息聚合)
“聚合程序”又被称为RSS阅读器。
https://blog.werner.wiki/what-is-rss-subscription/----什么是RSS订阅
——————————————————————————C#静态方法、访问修饰符等
https://blog.csdn.net/qq_43763494/article/details/100867297----【记录】关于C#遇到的问题、C#的访问修饰符以及C#静态类、静态方法的使用
——————————————————
字段是类的成员,局部变量是块的成员。
字段是指在类或结构中声明的“类级别”的变量。或者说,字段是整个类内部的所有方法和事件中都可以访问的变量。
局部变量是相对于字段来说的。可以将局部变量理解为“块”级别的变量。
只读字段(readonly) 只能初始化一次
19.10.15
链表其实先写出三点:①结点②初始化③遍历
理解之后再写别的就会好很多( ̄▽ ̄)"
https://blog.csdn.net/qq_43763494/article/details/101068960----【理解】链表的初始化与遍历
————————————————————————————Object类中方法的重写(override)
Object类中方法 equals(),x,y 引用同一对象时为 true
x.equals(y);
//还想写一篇博客但是。。。要等等,等闲时
https://blog.csdn.net/qq_43763494/article/details/102623721----【记录】Java 练习题10.18
JDK6API----这个.chm文件传不了┭┮﹏┭┮
——————————————————
final 关键字,主要修饰类、变量、方法类的成员变量分为:
类变量:有 static 修饰
实例变量,二者区别就是前者有 static 修饰
——————————————————
final 修饰的成员变量有三种初始化机会
①定义时 ②程序块中 ③构造方法中
https://blog.csdn.net/qq_43763494/article/details/102623721----【记录】Java 练习题10.18的练习1就是个例子
成员变量被final修饰后,就没有了默认值
局部变量本来就没有默认值,成员变量有
——————————————————
子类构造方法中默认调用父类的不带参数的构造方法
若父类中没有不带参构造方法
则需要在子类的构造方法中显式调用父类的带参数构造方法
super(name); 放在构造方法中 显式调用 //这个语句必须有不能少
父类的方法被final修饰后,子类不能重写该方法(父类的被 final 修饰的方法)
final 修饰的类,不能被继承
https://blog.csdn.net/qq_32635069/article/details/82813431----final变量的作用
———————————————————————————
多态:引用变量有两种类型:
①编译时 ②运行时
一般情况下这两种类型都是一致的,不一致时,出现多态
Animal an1 = new Cat(); 其中Cat是Animal的子类
Animal是编译时的,Cat是运行时的,即为多态的例子
https://blog.csdn.net/The_Best_Hacker/article/details/89076108----多态
关于引用变量:https://blog.csdn.net/WKX18330698534/article/details/77623381----【JAVA基础】引用变量
同时也是对类的实例化的通透式理解,个人感觉这个真的是Java基础
关于Java对象和引用变量:https://blog.csdn.net/weixin_35813749/article/details/52374749----Java对象和引用变量
19.10.16
Java的面试题,闲时看看,挺通透的
https://blog.csdn.net/jackfrued/article/details/44921941----Java面试题全集(上)
——————————————
今天主要上的是三节离散数学
前束范式不是唯一的
换名规则主要用于求前束范式时量词前移辖域扩张
https://blog.csdn.net/qq_43763494/article/details/101031873----【记录】离散数学知识点总结
19.10.17
数据结构 模式匹配的改进算法 KMP算法
看书!看书!看书!重要的事情说三遍!
——————————————————属性Property 的 get、set 访问器 用于简化代码
当 get、set 为空时,必须同时存在
方法([参数序列])的三种类型
ref关键字 ref int a 引用类型(这个就像传递地址一样,在函数中一系列操作后得出的 a,不用返回,原变量已经和 a 的值相等了)
out关键字 out int a 返回类型
参数组 params int[] arr
https://blog.csdn.net/wwlcsdn000/article/details/78731009----C#数组GetSet索引器分析
——————————被 static 修饰的构造函数为静态构造函数
静态构造函数既没有访问修饰符,也没有参数
在创建第一个实例或引用任何静态成员之前,CLR都会自动调用静态构造函数。
https://blog.csdn.net/zhangbp/article/details/8180629----理解.NET中的CLR原理
静态构造函数仅调用一次。如果静态构造函数引发异常,在程序运行所在的应用程序域的生存期内,类型将一直保持未初始化的状态。
————————————
方法重载----同名不同参
ref 和 out 不能互相重载(同时存在) 返回代码一样
就是说一个方法重载时用 ref 引用类型的参数
就不能在同时用 out 返回类型的参数重载这个方法
——————————————————————类的继承 多态
封装类:
①抽象(abstract) 不能实例化。
②密封(sealed) 不能继承。
继承 “ :”
扩充类 基类
——————
virtual (虚拟)不能用静态(static关键字)和私有(private关键字)修饰
虚拟化后实现 base.方法名()
重写(自己实现) (override)注意形式和原方法保持一致
new 隐藏
//待写博客(。^▽^)
—————
先看有没有实现的…(override)
没实现(没重写(就是没有关键字 override 修饰))的还是按照父类的来
——————————————————
回顾:
protected 可跨程序集 子类访问
internal 当前程序集
protected internal 上面二者的并集(看起来好像protected的范围更大一些)
——————————————————————关于Java数组的三种定义方式:
第一种:int[] arr1 = {1,2,3};
第二种:int[] arr2 = new int[]{1,2,3,4};
第三种:int[] arr3 = new int[5];
https://blog.csdn.net/qq_43763494/article/details/101111408#3_114----【记录】Java 练习题 9.21的第三个:求任意输入的和(用数组)。
—————————————————
Java中 next() 的输入范围比 nextLine() 小,比如后者可以输入空格,只有回车时才结束输入
https://blog.csdn.net/qq_39445165/article/details/83413516----
Java中next与nextLine方法的区别
19.10.18
在相同条件下 mkv avi rmvb wmv MP4 mp2
https://zhidao.baidu.com/question/521846002.html----rmvb和mkv哪个好
https://zhidao.baidu.com/question/30158366.html----mkv是什么格式?
————————————————————
更新博客时有个保存键,比发布要方便很多
————————————————————一个引用变量编译时类型与运行时类型不一致时,出现多态
范围小的到范围大的,隐式转换
对象的类型转换:
向上转型
向下转型
例如:An an1 = new Cat();就是向上,隐式转换
含义是:将Cat对象当作An类型来用,此时哪些只属于子类的方法就不能用了
向下转型 父转子
例如
Dog dog = new Dog(); change(dog); public static void change(Animal an) { Cat cat = (Cat)an; }
就是将An类型的an转为Cat,当然,这个代码是错误的
因为最后一条语句,Dog和Cat并没有继承关系,所以编译时能通过,但运行时会出错(不能将本是Dog的转为Cat)具体原因不清楚。。。
————————————————————————
接口 提了一下 interface
强制调用父类的构造方法
super(n)
参考19.10.15的,这个语句一定要有
因为想初始化一个父类的对象,必须给一个参数(父类只有带参的构造方法时)
eclipse: Debug后右上角切换回Java
语句:if(an instanceof Cat)
的意思是:an 是 Cat 或其子吗?
————————————————————————
写的知识点博客 一条一条的记好像有点难以理解。。。
难以看下去…
改为理解
19.10.19——周六
this 指代当前对象。
19.10.20——周日
打字测速以及盲打推荐网站:
https://www.keybr.com/----Typing practice
学习github:
https://www.javaboy.org/git/----Git 教程合集(顺序已经整理好)
19.10.21
C#:
一.常用结构和类的方法
1.Math类
2.DataTime和TimeSpan
3.秒表和计时器
4.随机数二.接口、委托和事件
1.接口,接口中只能声明,不能包含已经实现的方法
2.一个类可以有多个接口
3.可以通过接口实现类的多继承
4.定义一个委托
同名方法放入
加上event 就是事件
+= 注册事件
-= 取消事件
https://blog.csdn.net/qq_43763494/article/details/102661309----【理解】C# 委托与事件
19.10.22
Java:
抽象方法必在抽象类中
抽类不能实例化
抽类中可以没有抽方
抽类只能被继承
抽子必实现抽类中的所有抽方,否则仍为抽类
接口:就是完全抽象,抽类中还可以有非抽象方法,接口中方法均抽象
接口中变量(属性)默认public static final 就是全是全局常量
方法默认 public abstract,就是全抽象,而且是 public
接口可以继承接口
https://blog.csdn.net/qq_43763494/article/details/102689419----【理解】Java 关于抽象类、抽象方法、接口以及架包
——————————如何使用Eclipse打开Java工程文件:
https://jingyan.baidu.com/article/636f38bb96cfd2d6b946107b.html----如何使用Eclipse打开Java工程文件
—————————————
常量一般全部大写(如:String LIFESTYLE = "alive";
)
——————————————————
DS:
思维导图
二维转一维,下标之间的关系
k = 0存值相同的上三角
利用三元组,转置矩阵,压缩矩阵
————————————
还有各书课后题
DS要看看网课:
https://www.bilibili.com/video/av2975983
19.10.23
离散数学:
全集:是个相对性的概念
幂集:全体子集
相对补: -
A - B (A减去B中的)
绝对补:~
~A = E - A对称差:(A并B)-(A交B)
运算顺序:~ 和 P(A) 优先
——————————
- 命题演算法。
- 包含传递法,找个中间集 T。
- 利用包含的等价条件。
- 反证法。
- 利用已包含式并交运算。
- 等式替换。
- 集合运算法。
- 包含排斥原理。
——————
减多了加,加多了减
19.10.24
DS:
广义表深度 = 表中括号重数 = ◉结点层数
原子深度 = 0
空表深度 = 1
当广义表LS非空时,称第一个元素为LS的表头(Head),
- 称其余元素组成的表是LS的表尾(Tail)。
若列表不空,则可分解成表头和表尾;
- 反之,一对确定的表头和表尾可惟一确定列表。
C#:
time.Enabled
Stopwatch.Restart
———————加下划线,用来表示全局变量
进度条跑到头,performStep()
运行位置,StartPosition,可以改为CenterScreen,屏幕中央运行
定义全局变量后定义一个封装属性(get、set)
19.10.25
Java:
方法重载:方法重载是为了节省不必要的浪费(不同的函数名有大致相同的功能)
重载条件:
- 同一个类中,函数名相同,参数列表不同(包括参数个数不同,或参数类型不同)
- 重载方法返回值类型应该相同。
https://blog.csdn.net/weixin_43101144/article/details/84758613----Java方法重载
https://blog.csdn.net/wzcyamadie/article/details/60468844----C#—方法重载
回顾:
类:包括类声明和类体
类体中:包括成员变量的声明和方法的定义
类的成员变量包括:类变量,实例变量,这在19.10.15中说过
https://blog.csdn.net/u012036927/article/details/14103999----实例变量和类变量内存分配
类的方法也可以分为实例方法和类方法(类方法即 static 静态方法)
Java:对象的引用和实体
Java的引用型数据:对象、数组、接口引用型变量中存放的是引用
————————
Has-A:该对象将其他对象作为自己的组成部分
19.10.26——周六
尾指针:(该链接里的结构体的定义也是一个亮点)
https://baike.baidu.com/item/%E5%B0%BE%E6%8C%87%E9%92%88/22800134?fr=aladdin----尾指针
19.10.27——周日
堆和栈:
- 每当定义一个变量、常量或者对象的时候,都会有一个存储这些值的地方,这个地方就是内存堆;
- 栈是一种遵循LIFO(先进后出)的规则的数据结构,用于存储和获取数据;
——————————————
https://www.cnblogs.com/mufc/p/11046808.html----堆和栈
今日,完成栈,完成C#Windows窗体应用程序的计时器以及随机数的代码
TCPIP书到,淘得哈喽算法以及计算机英语
19.10.28
C#:
foreach中的 item 不能编辑
C#事件引用问题:
https://bbs.csdn.net/topics/350244548----C#事件引用问题
C语言输入输出缓冲区:
https://blog.csdn.net/ww1473345713/article/details/51713471----【C】C语言输入输出缓冲区
https://blog.csdn.net/weixin_42048417/article/details/80358390----输入缓冲区与输出缓冲区
19.10.29
DS:
关于 树:
- 度 就是分支的数目,结点的度的最大值 = 树的度。
- 深度 是树中结点的最大层次。
- 双亲 就是前驱,注:结点的双亲好像只有一个。
- 叶子,终端结点,没有子孙,也是一个仅有根结点的子树。
- 分支节点 有分支的结点 即,非终端结点,就是除了叶子之外的,包括根结点。
- 祖先 该分支中除本身外的所有结点(该结点之上的结点,不包括子孙)。
- 子孙 以本身为根的子树上的所有结点。
- 有序树(区分从左至右的次序,即不能互换),无序树
- 森林(子树的集合,可以为0棵子树)
- 左孩子,右兄弟
二叉树:
可以为空,空树存在
n 个结点有 n - 1 个分支(根没有)
n = n0 + n1 + n2(写在字母后面的数字是该字母的下标)
n1 + 2*n2 = n - 1 (分支数)
- n0 = n2 + 1(在二叉树中都成立)
Java:
数组为引用类型,即,是一个对象
需要 new
x = int [100]
x里是首地址
x 指向一组对象
动态初始化的声明和赋值分开
静态初始化有两种,推荐第二种
ArrayIndexOutOfBounds(下标越界异常)NULL Pointer Exception(空指针异常)
例如:
arr = null; cout << a[0]
数字逻辑:
画逻辑图
定左边定右边定中间(确定都有什么门)
19.10.30
离散数学:
关系型数据库
- 有序对(笛卡尔积后得有序对)
如果一个集合为空集或者它的元素都是有序对,
则称这个集合是一个二元关系A × B的任何子集所定义的二元关系称作A到B的二元关系,
当A = B时,称作A上的二元关系
全域关系 E
恒等关系 I
关系矩阵
关系图(不能表示A 到B的关系,只能表示A上的关系)
- 关系的运算:
求关系的定义域、值域和域
还有逆、合成、限制和像。A上的关系,多了,2的(n的平方)次方个,即2^ (n2)
R为A上的关系,n为自然数,则R的n次幂规定为:
R0 = I(A的恒等关系)
Rn = Rn-1合成R,n>=1。
C#老师给的好礼物。。。
https://www.cnblogs.com/kissazi2/p/3189685.html----从使用层面上了解委托和事件的区别
19.10.31
数据结构:
- 前提:完全二叉树
结论:N 为偶,则 n1 必为 1。n0 = (N/2)下取整
N 为奇,则 n1 必为 0。(因为有个根结点)
结论解释:N 是总结点数,若 N 为偶数,则除了单独的根结点以外一定还有一个单独的叶子结点,即 n1 (度为1的结点)必为1。
关系:若结点为 i,则其左孩子为 2 * i,右孩子为 2 * i+1,
双亲为 i / 2 下取整(根结点无双亲)这个需要记好,在完全二叉树中,n0 = n2 + 1
即,度为0的结点(叶子结点)等于度为2的结点总数+1
————
逆波兰式
先序、中序和后序。
C#:
lg(了解即可):
Environment 和 DriveInfo 类
Path 类,解析一下文件
目录管理
文件管理
- 注:转到定义,可以看好多东西
foreach 列举
同一线程按顺序进行
timer 相当于多了个线程
.BeginInvoke 混着
Thread.Sleep(1);休息1毫秒。
泛型:Node< T >指定参数类型,T可以代表任何类型
19.11.1
Java:
空指针异常
多维数组就是一维数组
比如:二位数组就是,一维数组中的每一个数组元素又是一个一维数组
第一维 i 也是行数,第二维 j 也就是列数(这个看自己,第一维列第二维行也行)
int a[][3]
是非法的
int b[3][]
正确
a[i].length
可以用于表示二维数组中每一行的长度
19.11.2 ——周六
Java:接口回调:
https://blog.csdn.net/hbyh632/article/details/78592242----JAVA接口回调详解
开始GitHub:通过使用版本控制,我们可以无忧无虑的改进项目
你在项目中实现一个新功能的时候,Git将跟踪你对每个文件所做的修改。
https://www.cnblogs.com/wj-1314/p/7992543.html----浅谈使用git进行版本控制廖雪峰的官方网站:
https://www.liaoxuefeng.com/wiki/896043488029600/896827951938304----廖雪峰的官方网站
安装Git:
https://git-scm.com/downloads----Git-Downloads
https://blog.csdn.net/xgocn/article/details/80447075----Git安装和使用(谨记)
19.11.3 ——周日
在文件夹中点击右键,然后点击 Git Bush Here
直接在桌面点会出一些莫名其妙的错误再次记录学习GitHub网站(江南一点雨):
https://www.javaboy.org/git/----Git 教程合集(顺序已经整理好)
更适合初学者的学习网站(廖雪峰的官方网站)
- 廖雪峰的官方网站里有好多教程
https://www.liaoxuefeng.com/wiki/896043488029600/896827951938304----廖雪峰的官方网站
打开一个 vi 编辑器:
http://c.biancheng.net/view/521.html----打开一个 vi 编辑器
19.11.4
C#:开始讲 WPF 了
各种课本例题的实现学到的 git hub 命令(持续更新)
- 首先
mkdir
创建一个版本库git init
把这个目录变成Git可以管理的仓库(会出现一个.git隐藏目录)git status
查看仓库状态git add
将一个文件添加到暂存区git commit
将暂存区文件提交到本地仓库git diff
查看工作区和暂存区的区别以及工作区和最新提交的差别
顾名思义就是查看difference,显示的格式正是Unix通用的diff格式
在add与commit之前使用
关于版本回退:
https://www.liaoxuefeng.com/wiki/896043488029600/897013573512192----版本回退
git log
显示从最近到最远的提交日志(只显示当前分支的 commit ,并且不显示删除掉的 commit)(相当于显示历史记录)git log --pretty=short
简略信息
git log --pretty=oneline
一行输出(这个是最好用的)- 最好不用
git log
,不知道为什么每次用都会循环然后只能关掉重新打开Bash,
用git log --pretty=oneline
最舒服,直接显示出来了(。^▽^)git reset --hard HEAD^
回退到上一个版本,在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个 ^比较容易数不过来,所以写成HEAD~100
。cat readme.txt
查看内容git reset --hard commit_id
,回到来时的版本,版本号写前几位即可git reflog
显示整个本地仓库的 commit (commit_id), 包括所有 branch 的 commit , 甚至包括已经撤销的 commit , 只要 HEAD 发生了变化, 就会在 reflog 里面看得到
要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。
- 暂存区是Git非常重要的概念,弄明白了暂存区,就弄明白了Git的很多操作到底干了什么。
- Git跟踪并管理的是修改,而非文件。
每次修改,如果不用git add到暂存区,那就不会加入到commit中。
又到了小结时间。
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- file
。- 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令
git reset HEAD
,就回到了场景1,第二步按场景1操作。- 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
创建SSH Key
- https://www.liaoxuefeng.com/wiki/896043488029600/896954117292416----远程仓库
- 关联一个远程库,使用命令
git remote add origin git@server-name:path/repo-name.git
;- 把本地库的内容推送到远程,用
git push
命令,实际上是把当前分支master
推送到远程。- 关联后,使用命令
git push -u origin master
第一次推送master
分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;- 由于远程库是空的,我们第一次推送
master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送到远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
ls
查看其中有什么文件- 要克隆一个仓库,首先必须知道仓库的地址,然后使用
git clone
命令克隆。- Git支持多种协议,包括
https
,但通过ssh
支持的原生git
协议速度最快。
- Git鼓励大量使用分支:
查看分支:git branch
创建分支:git branch
切换分支:git checkout
或者git switch
创建+切换分支:git checkout -b
或者git switch -c
合并某分支到当前分支:git merge
删除分支:git branch -d
- 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph
命令可以看到分支合并图。
- Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward
合并就看不出来曾经做过合并。
直接合并的话不会出问题么。。。发布版本之前再检查?
- 修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash
一下,然后去修复bug,修复后,再git stash pop
,回到工作现场;
在master
分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick
命令,把bug提交的修改“复制”到当前分支,避免重复劳动。
git rebase -i
可以实现提交历史的压缩git checkout --
撤销工作区的代码修改git reset HEAD
将暂存区的代码撤销git reset --hard <版本号>
实现版本回退,撤销提交到本地仓库的代码
19.11.5
SO-DIMM:
https://baike.baidu.com/item/SO-DIMM/3414598?fr=aladdin----SO-DIMM
内存条:
https://zhidao.baidu.com/question/566346268236745404.html----内存条DDR3和DDR4后面的数字是什么意思?
https://wikipedia.hk.wjbk.site/baike-----随机存取存储器(RAM)
买电脑电脑参数:
屏幕:
FHD(高清屏)LED背光显示 分辨率(1080P)
色域:NTSC72%色域应该是等于sRGB100%的
台式机sRGB100%是入门级
刷新率:一般达到80Hz以上就可以完全消除图像闪烁和抖动感,笔记本一般都是标准的60Hz,LCD(液晶显示器)
帧数:画面改变的速度,理论上,每一帧都是不同的画面
屏幕类型:IPS屏要优于TN屏内存:
内存容量:RAM(4G、8G、16G)
内存插槽数量2,剩余1,整机最大支持内存 16GB*2(即两个16G内存条)显卡:
独立显卡要好一些,一般都是
AMD Radeon RX550X 2GB GDDR5(2G 独显)硬盘:
固态硬盘读取和写入速度(随机存取)更快一些;(相对于机械硬盘)
体积小重量轻,工作噪音分贝基本为0,发热低,防震抗摔;
就是寿命较短,数据丢失不可恢复(硬盘损坏)处理器:
CPU速度:1.6GHz睿频至3.9GHZ(看相关)
https://zhidao.baidu.com/question/29974153.html----超频
三级缓存:降低内存延迟和提升大数据量计算能力
https://baike.baidu.com/item/=aladdin----三级缓存
核心:一般是双核和四核
CPU型号:iX-XXXXu,现在好像有了10210u第十代
19.11.6
离散数学:
关系的5种性质:自反性、反自反性、对称性、反对称性、传递性
关系的闭包:三种方式,一般用关系图(比较简单)
商集是A的一个划分,子集族Π中的元素为A的划分块(等价类)
偏序关系,可比,盖住,哈斯图
19.11.7
DS:
树和森林与二叉树的关系
C#:
WPF启航 (^^ゞ
19.11.8
JDK13已经来了,为什么仍使用JDK8:
升级版本耗时费力,最重要的是有可能影响服务的稳定性
JDK8已经足够,后来的版本收费。。。
- OracleJDK 收费是针对 公司、商业用途的,如果只是个人学习Java的话,这些是没什么影响!
从今年1月份开始,Oracle JDK 开始对 Java SE 8 之后的版本开始进行商用收费,确切的说是 8u201/202 之后的版本
https://blog.csdn.net/lirenzuo/article/details/100531960----jdk13快来了,jdk8的这几点应该看看!JDK 8u202 下载地址:
https://www.oracle.com/technetwork/java/javase/downloads/java-archive-javase8-2177648.html----Java SE 8 Archive Downloads (JDK 8u202 and earlier)
Maven下载和安装:
https://blog.csdn.net/cs4380/article/details/79158268----Maven下载和安装
19.11.9——周六
MySQL下载安装详情教程:
https://www.cnblogs.com/ziyoublog/p/9722849.html----MySQL下载安装详情教程
MySQL Community Downloads:
https://dev.mysql.com/downloads/mysql/----MySQL Community Downloads
'net’ 不是内部命令或外部命令,也不是可运行的程序或批处理文件
解决办法:在配置环境变量时,加上
%SystemRoot%\system32
https://www.cnblogs.com/caiyishuai/p/10783198.html----'net’ 不是内部命令或外部命令,也不是可运行的程序或批处理文件
19.11.10——周日
leetcode上的题还不能刷,最简单的都写不出来,学好基础的数据结构与算法先
19.11.11
C#:第八章,WPF的一些控件
线性表插入数据元素的时候为什么要先插入,再++L.length?
大概是因为,插入数据元素时已经分配的空间足够,L.length只是做个标记,告诉你长度是多少。。。
困扰了好久的输入时如何回车跳出的问题
有关连续cin输入数据(cin不丢弃回车符,>>会跳过回车符)
可以用cin.get()
、gitchar()
,总之不能有>>
https://blog.csdn.net/dcj0913/article/details/39058555----有关连续cin输入数据(cin不丢弃回车符,>>会跳过回车符)
cin读取字符是会忽略空格和换行的,可以用noskipws设为不跳过空格或者换行。
char step; cin>>noskipws>>step;
C#中回车跳出只需一句话:if (Console.ReadKey().Key == ConsoleKey.Enter) break;
char c = '1';
for(int i = 0; c != 10; i++) {
c = getchar();
cout << c;
} //用ASCII码
19.11.12
DS:
注: 等概率(等权重)时等长编码是最优的前缀编码
状态树
Java:
System类,
rt.exec()
方法可以执行cmd命令,
currentTime
获取当前时间
Random
默认种子为机器时间,种子相同时,随机数相同
Runtime rt = Runtime.getRuntime(); //单例模式
Process p = rt.exec("notepad.exe"); //返回值为进程
Thread.sleep(1000); //停1秒后消失
p.destroy(); //杀进程
19.11.14
C#中使用split分割字符串的几种方法小结
https://www.cnblogs.com/xinloverong/p/11005405.html----C#中使用split分割字符串的几种方法小结
C#中可以使用key.KeyChar获取输入字符,也可以使用key.Key获取输入的键位
19.11.15
包装类
Integer.parseInt(Str); Integer.valueOf(Str); 将String转为Integer或int Integer intV = Integer.ValueOf(基本数据类型) ———— 自动装箱、拆箱: 指基本数据类型和对应的包装类之间能直接转换(Java内部)
19.11.16——周六
值类型和引用类型的区别就是,值类型变量直接在堆栈中保存变量的值,引用类型的变量在堆栈中保存的是对象的引用地址
- 指针就是地址
- 当程序出现异常时:
try{异常语句}
catch(Exception){"提示错误"}
捕捉异常,并处理(输出个提示)goto
用于从复杂循环中直接跳出到循环体外部结构是一种轻量型的类
19.11.17——周日
Tomcat:
https://baike.baidu.com/item/tomcat/255751?fr=aladdin----Tomcat_百度百科
Redis 是什么?
https://blog.csdn.net/weixin_42295141/article/details/81380633----Redis是什么?什么作用?优点和缺点
Redis 下载
https://blog.csdn.net/yang5726685/article/details/81194977----redis官方下载安装(Windows64位)
19.11.18
C#期中测试:关于泛型和读取文件
string path = @"D:\text\学生成绩.txt"; //取出文件路径
string readTxt = File.ReadAllText(path, Encoding.Default);
Console.WriteLine(readTxt);
19.11.19
Java:
整数运算的结果一定是精确的,浮点数常常无法精确表示。
比如0.1,十进制的0.1转化为二进制是一个无限循环小数,无论是
float
还是double
都只能存储一个近似值
https://blog.csdn.net/qq_43763494/article/details/99640004----【记录】如何判断输入的数值类型是否合理?如何判断浮点型数据相等?移位运算
用于整数:
<<
二进制左移,值为原来的两倍(移动到首位时会改变数的符号(正负))
>>
二进制右移,不会移动首位
>>>
右移,带首位(改变正负号)
19.11.20
Java:
基本类型的变量是“持有”某个数值,引用类型的变量是“指向”某个对象;引用类型的变量是指向某个对象
指向 指向 指向,重要的事情说三遍
https://www.liaoxuefeng.com/wiki/1252599548343744/1255941599809248----数组类型-廖雪峰的官方网站多行字符串如何赋值给一个
String
类型变量多行字符串可以用
"""..."""
表示(从Java13开始)
举个例子
public class Main {
public static void main(String[] args) {
String s = """
SELECT * FROM
users
WHERE id > 100
ORDER BY name DESC""";
System.out.println(s);
}
}
什么是域名?
- 域是基于文本的地址,可重定向到网站的IP地址。它们允许访问者记住您的网站,而不必依赖其他方式,这反过来又改善了您的网站的外观以及它如何通过口口传播。
https://baijiahao.baidu.com/s?id=1613110688479207307&wfr=spider&for=pc----为什么您应该为您的网站使用自定义域名,有7点好处
学习使用IDEA
- Eclipse 中
workspace
相当于 IDEA 中的Project
Eclipse 中Project
相当于 IDEA 中的Module
- 工程下的
.idea
和learnIDEA.iml
文件都是 IDEA 工程特有的。类似于 Eclipse 工程下的.settings、.classpath、.project 文件等。https://www.cnblogs.com/zyx110/p/10666082.html----IDEA新手使用教程(详解)
https://www.runoob.com/w3cnote/intellij-idea-usage.html----Intellij IDEA 使用教程.pdf
https://jingyan.baidu.com/article/454316ab24a4cff7a7c03aeb.html----Intellij IDEA 使用教程-百度经验
https://www.jianshu.com/p/94190013f8d0----IntelliJ IDEA 使用教程(2019图文版) – 从入门到上瘾
19.11.21
终于找到网页版的了!
Java SE 11 & JDK 11
https://docs.oracle.com/en/java/javase/11/docs/api/allclasses.html----Java SE 11 & JDK 11 AllClass
数据结构:
图的四种存储结构:
①数组表示法:(多用于稠密图)
用两个数组:
- 第一个是一维数组,用来存顶点
(v1 v2 v3...)
- 第二个是二维数组,是邻接矩阵
——————————————
②邻接表:(多用于稀疏图)
- 对每个顶点建立一个单链表,每个链表上附设一个表头结点(表头即:顶点+指向第一个结点的链域)
- 表头结点通常以顺序结构的形式存储(可以链相接)
- 所以可以理解为用一个一维数组存表头结点,然后每个数组元素是一个链表
——————————————
③十字链表:(用于有向图)
- 就是结合邻接表和逆邻接表
- 顶点:
data | firstin | firstout
- 弧结点:
tailvex | headvex | hlink | tlink | info
- 其中链域
hlink
指向弧头相同的下一条弧- 链域
tlink
指向弧尾相同的下一条弧info
域指向该弧的相关信息——————————————
④邻接多重表:(用于无向图)
- 每一条边用一个结点表示(每个结点指的是一条边)
- 每个结点出现在两个链表中,结点表示为
mark | iv | il | jv | jl
- 顶点:
data | firstedge
图的遍历
实质:通过边查找未被访问的邻接点
需要一个辅助数组(访问标志数组,标志是否已经被访问过)
①深度优先搜索
②广度优先搜索
19.11.22
Java:
迭代器、foreach遍历与哈希值
- 方法返回迭代器
Iterator it = strList.iterator();
- 遍历:
while(it.hasNext()) { String s = (String)it.next(); /*从容器中取出后,只有Object类型,需要强制类型转换*/ }
- 删除会出问题
it.remove();strList.remove();
后者是用foreach
时
用foreach
遍历是最方便的
class
模板
instance
实例
字段field
和局部变量的区别就是:
- 字段是声明在类中的。(不是方法也不是程序块,而是类中)
hashCode()
哈希值
equals
默认比的是两个对象的地址//重写hashCode() Public int hashCode() { return id.hashCode(); } //重写equals() public boolean equals(Object obj) { if(this == obj) return ture; if(!(obj instanceof Student)) return false; Student stu = (Student)obj; boolean b = this.id.equals(stu.id); reutrn b;
19.11.23——周六
this
始终指向当前实例可变参数、参数绑定
- 可变参数用
类型...
表示,可以相当于数组类型
参数绑定:
- 基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响。
- 引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方(因为指向同一个对象嘛)。
面向对象编程,英文是Object-Oriented Programming,简称OOP。
再会继承
在OOP的术语中,我们把
Person
称为超类(super class)、父类(parent class)、基类(base class),把Student
称为子类(subclass)、扩展类(extended class)
- Java只允许一个class继承自一个类,因此,一个类有且仅有一个父类。只有Object特殊,它没有父类。
- 子类不能调用父类中的
private
字段或方法,可以调用protected
的。
因此,protected
关键字可以把字段和方法的访问权限控制在继承树内部- 任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句
super();
此时若父类中没有不带参数的构方,则编译失败
这也表明,子类默认的构造方法是编译器生成的而不是继承自父类中的————————
向上转型,向下转型:
- 把一个子类类型安全地变为父类类型的赋值,被称为向上转型(upcasting)。
Person p1 = new Student();
(变得更抽象),分解为:
Student s = new Student();
Person p1 = s;
还可以向上转到父类的父类。。。Object o1 = s;
还有Object o2 = p1;
- 把一个父类类型强制转型为子类类型,就是向下转型(downcasting)。
不能把父类变为子类,因为子类功能比父类多,多的功能无法凭空变出来。
向下转型只能是Person p = new Student();
p 本来就是子类类型向上转的父类,Student stu = (Student)p;
也就是说只能把原来是子类类型的向上转的类型向下转型,为了避免出错,Java提供了instanceof
操作符,可以先判断一个实例究竟是不是某种类型,或者这个类型的子类。
继承是is关系,组合是has关系。
具有has关系不应该使用继承,而是使用组合,即Student可以持有一个Book实例。
再会多态
- Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。
这个非常重要的特性在面向对象编程中称之为多态。- 多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。
覆写(即Override重写)
在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写(Override)。
- 即,方法名相同,方法参数相同,方法返回值也相同。
- 加上
@Override
可以让编译器帮助检查是否进行了正确的覆写。
——————因为所有的class最终都继承自Object,而Object定义了几个重要的方法:
toString()
:把 instance 输出为 String;
equals()
:判断两个 instance 是否逻辑相等;
hashCode()
:计算一个 instance 的哈希值。在必要的情况下,我们可以覆写Object的这几个方法。
final
修饰符有多种作用:
- final 修饰的方法可以阻止被覆写;
- final 修饰的 class 可以阻止被继承;
- final 修饰的 field 必须在创建对象时初始化,随后不可修改。
再会抽象
抽象的来源:
- 定义方法的时候,必须实现方法的语句
如果父类中将方法去掉,就失去了多态的特性- 如果父类的方法本身不需要实现任何功能,仅仅是为了定义方法签名,目的是让子类去覆写它,那么,可以把父类的方法声明为抽象方法(这也是去掉方法执行语句的方法)
- 普通类包含抽象方法的话,无法编译
因为无法执行抽象方法,因此这个类也必须申明为抽象类(abstract class)。
- 因为抽象类本身被设计成只能用于被继承,因此,抽象类可以强迫子类实现其定义的抽象方法,否则编译会报错。
抽象编程
面向抽象编程的本质就是:
- 上层代码只定义规范(例如:
abstract class Person
);- 不需要子类就可以实现业务逻辑(正常编译);
- 具体的业务逻辑由不同的子类实现,调用者并不关心。
这种尽量引用高层类型,避免引用实际子类型的方式,称之为面向抽象编程。
Person s = new Student(); Person t = new Teacher(); //这种引用抽象类的好处在于,我们对其进行方法调用,并不关心Person类型变量的具体子类型: // 不关心Person变量的具体子类型: s.run(); t.run(); // 同样不关心新的子类是如何实现run()方法的: Person e = new Employee(); e.run();
19.11.24——周日
不写这么啰嗦了,简洁几句话即可,不如直接去看网站
静态字段与静态方法并不属于实例
静态字段属于所有实例“共享”的字段,实际上是属于 class 的字段;
- 虽然实例可以访问静态的字段与方法,那只是因为编译器可以根据实例类型自动转换为
类名.静态字段
来访问静态对象。- 静态方法内部只能访问静态字段,无法访问
this
变量和实例字段
静态方法常用于工具类,还有辅助方法
在Java中,我们使用
package
来解决名字冲突。
Java内建的 package 机制是为了避免 class 命名冲突;
- 一个类总是属于某个包,类名(比如
Person
)只是一个简写,真正的完整类名是包名.类名
- 包没有父子关系
- 包名推荐使用倒置的域名,例如
org.apache
。包作用域
不用
public
、protected
、private
修饰的字段和方法就是包作用域。
- 位于同一个包的类,可以访问包作用域的字段
field
和方法method
。
import(在类中引用另外一个类)
在一个类中引用另一个类有三种方法:
- 第一种,直接写出完整类名
- 第二种写法是用
import
语句,然后写简单类名
还可以使用*
导入包中所有类一般不推荐这种写法,因为在导入了多个包后,很难看出Arrays类属于哪个包。- 还有一种
import static
的语法,它可以导入可以导入一个类的静态字段和静态方法(很少使用)
编译器自动导入的包: java.lang包
JDK 的核心类使用
java.lang
包,编译器会自动导入;JDK 的其它常用类定义在
java.util.*
,java.math.*
,java.text.*
,……;
作用域
public
作用域: 任何
private
作用域: class 内部
protected
作用域:继承关系
包
作用域是指一个类允许访问同一个package
的没有public
、private
修饰的class,以及没有public
、protected
、private
修饰的字段和方法
局部变量
作用域为从定义开始到对应的块结束- Java 内建的访问权限包括 public、protected、private 和 package 权限;
- final修饰符不是访问权限,它可以修饰class、field和method;
- 一个.java文件只能包含一个public类,但可以包含多个非public类。
最佳实践
- 如果不确定是否需要 public,就不声明为 public,即尽可能少地暴露对外的字段和方法。
- 把方法定义为 package 权限有助于测试,因为测试类和被测试类只要位于同一个 package,测试代码就可以访问被测试类的 package 权限方法。
- 一个
.java
文件只能包含一个 public 类,但可以包含多个非 public 类。如果有 public 类,文件名必须和 public 类的名字相同。
到底什么是
classpath
?classpath 是 JVM 用到的一个环境变量,它用来指示 JVM 如何搜索 class。
JVM通过环境变量 classpath 决定搜索 class 的路径和顺序;
- 不要把任何 Java核心库添加到 classpath 中!JVM 根本不依赖 classpath 加载核心库!
更好的做法是,不要设置classpath!默认的当前目录.对于绝大多数情况都够用了。如何创建一个
jar
包jar 包实际上就是一个 zip 格式的压缩文件,而 jar包相当于
.class
的容器
jar包相当于目录,可以包含很多.class
文件,方便下载和使用;
MANIFEST.MF
文件可以提供 jar包的信息,如Main-Class
,这样可以直接运行 jar包。
- jar 包里的第一层目录,不能是
bin
- 在大型项目中,不可能手动编写
MANIFEST.MF
文件,再手动创建 zip包。Java 社区提供了大量的开源构建工具,例如Maven
,可以非常方便地创建 jar 包。https://www.liaoxuefeng.com/wiki/1252599548343744/1260466914339296#0----classpath和jar
19.11.25
C#的自习,问了老师Canvas该怎么用
Canvas.SetTop(label1, Canvas.GetTop(label1) - 10); //把label放到Canvas中,然后获取相对于其的位置,然后更改
19.11.30
为什么
switch 的 case
中不能定义变量时赋初值,可以先定义后赋值?https://zhidao.baidu.com/question/439783075.html----百度知道
typedef
:用来为复杂的声明定义简单的别名,它与宏定义有些差异
C/C++中
->
与.
的区别是?https://zhidao.baidu.com/question/143290358.html----c++中 . 和 -> 的区别是什么?
- 唯一的区别是->前面放的是指针,而.前面跟的是结构体变量
19_12_4
离散数学:
图的基本概念:
- 运算时才有空图的出现
- 基图:无向边代替有向边
- 平凡图:只有一个顶点
- 零图:没有边
- n阶图:n个顶点的图
- 握手定理:一条边产生两个度
- 简单图:没平行边、没环
- 真子图:母图少了点
- 生成子图:顶点相同
- 顶点的导出子图:找两端都在V1中的边加入图
- 边的导出子图:找边的端点加入图中
- 补图:(条件:无向简单图)补图是相互的,补完后是完全图(K)
- 同构:(条件:顶点数相同,边数相同,顶点对应的度相同)然后考虑定义,双射关系,一一对应
- 简单通路:通路中的所有边互不相同(首尾相同即回路)
- 初级通路(路径):除首尾外所有顶点互不相同,所有边也互不相同(首尾相同即圈)
- 连通:存在通路
- 连通分支:图中几块互相不连通的连通分量
- 割点:去掉后连通分支数增加
- 割边(桥):去掉后连通分支数增加1
- 根据握手定理,度数是边数的两倍
- 有向图的邻接矩阵的性质:
- 所有元素之和 = 边数(长度为1的通路数)
对角线之和 = 回路数(长度为1的回路数,即环)
邻接矩阵A的L次方就是对应的长度为L的通路与回路- 关键路径在数据结构中讲过了
我的随笔:
https://www.cnblogs.com/concentrate-haolong/p/11986205.html----图的基本概念——离散数学 19_12_4
19_12_5
C/C++的无限数组问题
- 每一个指针就是一个一维数组,同理,一个二级指针就是一个二维数组
#include<iostream> #include<cstdlib> using namespace std; typedef int * arr; int main() { arr book; //int * book; //book = (arr)malloc(sizeof(int)); //给数组首地址分配内存空间 //实验后发现,不用malloc也行,应该是定义的时候已经分配内存了 for(int i = 0; i < 99; i++){ book[i] = i; cout << book[i] << " "; } return 0; }