简易数据库学习-1
关系型数据库的基本概念
最简单的关系型数据库
组成:字段(属性)、关系模式、记录(元组)
要求
列与行是无序的
同一列的类型相同
元组不能完全相同
一个属性值必须是原子值
KEY
主KEY(必需)*
唯一标识符
候选KEY
其他标识符
外KEY
一个表的候选KEY是其他表主KEY
数据库的组成
一般由多张表组成
之间相互有联系
关系中的数据约束
实体完整性约束
即主KEY不为空
参照完全性约束
即外KEY不能为NULL(类似于指向空指针)
用户定义的完整性约束
即属性值必须在规定范围内
关系代数(对表的元素进行运算)
交并差 不叙
笛卡尔积
离散中学过了A={a,b,c} B={a,b} AxB={<a,a>,<a,b>,<b,a>,<b,b>,<c,a>,<c,b>}
组成新的序列
在这里,理解起来也类似,只是A和B的元素变成了行
投影
就是筛选
选择
除法
可以看成是乘法逆运算
但是如果不符合的就被丢掉了
连接
就是做笛卡尔积时再进行筛选
多个条件使用∧∨
∧是且∨是或,这个 ...
写几个自己比较喜欢的字体
DejaVu Sans Mono -Regular
Hasklig -Semibold
Fira Mono for Powerline -Medium
Inconsolata系列 都很好看
Anonymous Pro -Bold
Hack Nerd Font -Regular
目前用的是DejaVu Sans Mono for Powerline 圆润好看,还有就是非ascii码的字体大小要与默认字体大小一致,不然会有字间距过宽的问题。
记录下kali里burpsuite的配置过程
Java环境配置
kali里默认的都是openjdk的java,先换成oracle的(依稀记得之前也能跑,不行再来做这一步吧
下载地址https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html
要登录Oracle账号,我下载的是jdk-8u202-linux-x64.tar.gz
进行java环境更换
update-alternatives --config java
update-alternatives --config javac
这两条语句用来更换环境
123456mv 桌面/jdk-8u202-linux-x64.tar.gz /optcd /opttar -xzvf jdk-8u202-linux-x64.tar.gz rm jdk-8u202-linux-x64.tar.gzcd jdk1.8.0_202vi ./zshrc
我这里用的是zsh,如果你是bash就是.bashrc
输入
1234567# install JAVA JDKexport JAVA_HOM ...
一些前端知识
html、css、js
html是框架,css则是颜色布局文件,js则实现逻辑。
同时还可以通过js来实现动态网页
ajax、json、xml
ajax就是动态加载,像下划刷新那种
json实质上是dic,通过键值对来储存数据
xml是一种可扩展的标记语言,可以自定义标签
dom树
就是。。结构树一样的东西
Http&简单Socket的学习
学习爬虫顺便学习一下
网络请求的过程
IP地址和url
动态ip和静态ip的问题
动态ip,对外是不固定的,定时收回更换,同时在家中布置服务器也不现实
静态ip,花钱买呗
url协议
url即资源地址
模板:http://www.example.com:80/path/to/xxx.html?key1=www&key2=333#chap
常用协议:http https file ftp
TCP/IP协议
TCP
是一种面向连接的、可靠的、基于字节流的传输层通信协议。
在协议族中位于IP层之上,应用层之下,负责处理数据流,处理丢包等情况。相当于一个中间者
TCP的三次握手连接(three-way handshake)
ps:SYN(建立连接), ACK(响应) == 数据包 (SYN攻击也是DDoS的一种, 消耗CPU和内存)
流程:Client 向 Server 发送一个 SYN 来创建一个主动打开,Client 把这段连接的序号设为随机数 A ,然后 Server 为合法的 SYN 传回一个 SYN/ACK ,其中 ACK 的确认码为 A+1, SYN/ACK 包 ...
UIKit-让TextView和键盘动起来
今天在写评论页面,需要实现评论框和页面一起动起来
使用固定高度
12345678910111213141516171819202122232425enum Move { case up case down}func animatetextView(textView: UITextView, move: Move){ let movementDistance:CGFloat = -350 let movementDuration: Double = 0.3 var movement:CGFloat = 0 if move == .up { movement = movementDistance } else { movement = -movementDistance } UIView.animate(withDuration: movementDuration) { self.com ...
UIKit-两种可行的计算Label高度的方法
今天做ZrMusic的评论页面的时候需要通过text来自适应Label的高度,用了两种比较好的方法,分享一下
提醒
label的numberOfLines属性要设置为0,即能显示多少行就显示多少行,不然默认是只有一行的
通过textBound的形式
123456func heightWithText(text:String) -> CGFloat { let size:CGRect = text.boundingRect(with: CGSize(width: 100, height: 999.9), options: NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSAttributedString.Key.font:UIFont.systemFont(ofSize: 14)], context: nil) return size.height }
可以通过配置参数得到
通过sizeToFit ...
UIKit-For循环可恶的值传递
今天在写一个判断程序的时候,遇到了for循环中值传递和引用传递的问题
这是原代码:
然后输出显示
一堆的nil
可以看到有属性但是无法修改
当我改成利用下标来访问时
成功了,所以猜测for item in items采用的值传递,for i in 0..<count是引用
UIKit-关于UISearchController那些事
本篇讲到SearchBar一些配置中的问题
我使用的是在要添加的页面添加Controller然后新增一个TableViewController配合使用的模式
即
123let sr = SearchResults() searchController = UISearchController(searchResultsController: sr) searchController.searchResultsUpdater = sr
可以减少代码的臃肿量,尤其是在代码量很大的Player页面里,但会有很多数据传输的问题,这个先不谈
位置偏移
如果直接设置navigationBar隐藏,然后把searchBar添加到一个位置,会出现tableVIew留空的状态
这是tableVIew自动处理边距的问题
把tableView.contentInsetAdjustmentBehavior设置为never就行
如果设置一个View然后把bar放进去,不会又偏移,但是拖动列表后会出现偏移,解决方法也是把tableView.contentInsetAdjust ...
UIKit-Pass Data Between View Controllers
这几天都在写播放器… 相关的内容写完再上传吧
本文来源:https://learnappmaking.com/pass-data-between-view-controllers-swift-how-to/
Use var controller
假设我们有两个ViewController名为First和Second
Second里面有一个UILabel
1234567891011121314151617181920212223class Second: UIViewController { var text: String? override func viewDidLoad() { super.viewDidLoad() let btn = UIButton(frame: CGRect(x: 0, y: 500, width: 200, height: 200)) btn.backgroundColor = .red btn.addTarget(self, action: ...









