HOBBY

OC类的原理探究(一)

ぐ巨炮叔叔 提交于 2021-02-14 16:20:24
对象原理探究(一) 对象原理探究(二) 前面两篇文章介绍了OC对象的原理,以及一些分析的思路和方法,今天开始,将开启类的原理探究。 不过在探究类的原理之前,我想补充说明一个东西 isa指针定义如下: union isa_t { isa_t () { } isa_t ( uintptr_t value) : bits(value) { } Class cls; uintptr_t bits; # if defined(ISA_BITFIELD) struct { ISA_BITFIELD; // defined in isa.h }; # endif }; isa指针分为nonpointer指针和非nonpointer指针 。 非nonpointer指针没有经过优化,它里面只通过 cls 属性存储对应的类的地址; nonpointer指针是经过优化的,它通过 bits 存储很多信息。 需要注意的是, cls 和 bits 是互斥的: 非nonpointer指针只使用到 cls ,而nonpointer指针只使用到 bits 。 我们前面也讲到,nonpointer的isa指针可以存储很多额外信息,并且其存储信息的内存布局是跟架构有关的,下面这张图可以很形象地将该布局给展示出来: 类的结构分析 类是使用Class来接收 ,这一点我们在开发中已经非常熟悉了。所以关于类的结构分析

python3开发进阶-Django框架的Form表单系统和基本操作

自古美人都是妖i 提交于 2021-02-14 11:13:49
阅读目录 什么是Form组件 常用字段和插件 自定义校验的方式 补充进阶 一、什么是Form组件 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。 如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.。 Django form组件就实现了上面所述的功能。 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留用户输入的内容 1、普通的登录 views.py def login(request): error_msg = "" if request.method == "POST": username = request.POST.get("username") pwd = request.POST.get("pwd") if username == "duoduo" and pwd == "123456": return HttpResponse("OK") else: error_msg = "用户名或密码错误" return render(request, "login.html", {"error_msg": error_msg}) login

java课程学习day1-3

孤街醉人 提交于 2021-02-13 18:32:39
核心概念 jvm jdk jre 核心基础 java se 大型企业 java ee Jvm java虚拟机 Jdk java development kit java开发工具包 Jre java runtime environment java运行时环境 1.2java开发环境,按照jdk 甲骨文官网下载 Bin目录 javac和java Lib目录 第一步 安装jdk 第二步 配置环境变量 Java ­_home 配置jdk安装路径 Path 配置jdk命令文件的位置 Classpath 配置类库文件的位置 计算机 属性 高级系统设置 高级 环境变量 系统变量 新建 变量名JAVA_HOME JDK安装路径 Path变量 编辑 bin目录 ; Classpath变量 lib目录 .;lib目录 开始 搜索 cmd java回车 javac 回车 使用记事本编写java程序 Myprogram.java 源文件 Myprogram.class 字节码文件 改后缀HelloWord.java 工具 文件夹选项 查看 隐藏已知文件的扩展名 去√ Java命令后不能跟文件后缀 题目 在控制台运行一个 Java 程序 Test . class ,使用的命令正确的是( )java Test 使用eclipse开发java程序 集成开发环境IDE是一类软件

MongoDB学习

自作多情 提交于 2021-02-05 10:05:23
mongodb – 分布式的基于文件存储的数据库,存储空间较大,适用于需求为频繁读写。(关系型数据库适合于多表依赖关系级联查询) mongodb不支持事务操作(事务操作即如果一次查询中间失败,则会回滚=》即一次查询要么成功要么失败返回) 关系型数据库中的表(tables)对应mongodb中的集合(collections) show dbs(查看当前都有哪些数据库) use xiaoliu(如果有xiaoliu这个数据库就进入,如果没有就创建这个数据库并进入这个数据库,但因为xiaoliu这个数据库暂时是空的,所以紧接着show dbs还是看不到xiaoliu这个数据库) db查看当前所在数据库 show collections 显示当前所在数据库中的集合都有哪些 db.user.insert({‘name’:’liupeijie’})在当前数据库中新建一个用户集合(user),并插入一条数据 db.user.find()在用户集合(user)中查询数据是否插入成功 db.user.findOne()查询用户集合(user)中的第一条数据 db.user.remove({‘name’:’zhangsan’})在user集合中删除name为zhangsan的数据(有几条删几条,remove(删除条件)) db.user.drop()清空user()集合中的所有数据 db

我来聊聊面向模板的前端开发

↘锁芯ラ 提交于 2021-01-24 11:46:40
在软件开发中,研发效率永远是开发人员不断追求的主题之一。于公司而言,在竞争激烈的互联网行业中,产出得快和慢也许就决定着公司的生死存亡;于个人而言,效率高了就可以少加班,多出时间去提升自己、发展爱好、陪伴家人,工作、生活两不误。 提升效率的途径,无外乎就是「方法」和「工具」。以一个开发者的思维来想,就是将工作内容进行总结、归纳,从一组相似的工作内容中提炼共同点,抽象出解决这一类问题的方法,从而造出便于在今后的工作中更为快速解决这类问题的工具。这个「工具」可以是个函数、组件、中间件、插件,也可以是 IDE、其他开发工具的扩展,甚至是语言。 面向组件 在现代前端开发中,如果去问一个业务前端开发:「如何提升团队开发效率?」对方所回答的内容中,极有可能会出现「组件库」。没错,在前端工程化趋近完善的今天,在近几年 React、Vue 等组件化库/框架的影响下,面向组件开发的思维方式早已深入人心。 组件库提效有限 现在,组件库已经是一个前端团队的必备设施了,长远来看,团队一定且必须要有自己的组件库。开源的第三方组件库再好,对于一家企业的前端团队来说也只是短期用来充饥的,因为它们无法完全满足一家公司的业务场景,并且出于多终端支持的考虑,必定要进行二次开发或者自研。 组件库有了,团队和公司中推广的效果也不错,绝大多数的人都在用。使用组件开发页面相对 jQuery 时代要每块功能区都得从 <span>

Vue.js之常用指令

試著忘記壹切 提交于 2021-01-23 04:50:08
vue常用指令 vue.js官方给自己的定义是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍vue.js的常用指令. 官网: 点我 一.v-text、v-html v-text:用于绑定文本 v-html:用于绑定html < div id ="app" > < p > 姓名: < label v-text ="Name" ></ label ></ p > < p > 姓名:{{Name}} </ p > < div v-html ="Age" > 年龄: </ div > </ div > < script > new Vue({ el: " #app " , data: { Name: " corn " , Age: " <label>20</label> " } }) </ script > =======================> 姓名:corn 姓名:corn 20 1.{{Name}}这种写法和v-text的作用是相同的,用于绑定标签的text属性,如果标签没有text属性,该绑定会失效,比如在一个文本框上面使用v-text时没有效果的. 2.从结果看出,v-html绑定后会覆盖原来标签标签里面的内容,此处是覆盖,而并非append. 3.对于v-html应用时要慎重,在网站上会动态渲染任意html有一定的危险存在,因此容易导致XSS跨站脚本攻击

day2----python的基本类型

a 夏天 提交于 2021-01-13 19:04:07
本文档的大致内容:(python使用版本3.6.4) 1 数字--int 2 布尔--bool 3 字符串--str 4 元祖--() 5 列表---['a','b'] 6 字典--{} 运算符: 算数:+ - * / //(商的整数) %(余数) **(次幂) 比较:== != >= <= < >等 赋值:= += -= 逻辑运算:not and or 成员运算:in not in 一 数字 数字一般在计算的时候用的多,运算后无理数的话,总共保留16位数字 例如:print(2/3) 结果:0.6666666666666666 print(80/9) 结果为:11.428571428571429 二 布尔 其结果就两种 True 或 1 --》表示真 False 或 0 ---》表示假 优先级的大小:()> not > and >or 三 字符串 字符串一般使用 ’ ‘或 “ ”或 ’‘’ ‘’‘ 给括起来,其中’‘’ ‘’‘在多行字符串中使用 例如: msg = ''' 床前明月光, 疑是地上霜。 举头望明月, 低头思故乡。 ''' print(msg) View Code 字符串中含有 ’ 号时,其一般使用“”给括起来 例如: msg = "My name is 星辰, I'm 22 years old!" 3.1 字符串------增    str= ' hello

WEB入门 四 CSS样式表深入

痞子三分冷 提交于 2021-01-13 14:50:08
学习内容 Ø CSS选择器深入学习 Ø CSS继承 Ø CSS文本效果 Ø CSS图片效果 能力目标 Ø 掌握CSS选择器的组合声明和嵌套 Ø 理解CSS的继承 Ø 熟练掌握CSS文本效果 Ø 掌握CSS图片效果 本章简介 上一章学习了CSS的语法基础及文字效果,学习了3种选择器,选择器是CSS中非常重要的概念,本章将深入学习选择器的知识,主要包括选择器的集体声明和嵌套。面向对象编程语言中有为了实现代码的重用有继承的特性,而CSS中也有可以使用继承的特性实现代码的重用。 网页中只包含文字是单调的,加入图片后才能实现图文并茂的网页。本章将学习使用CSS实现丰富的文本和图片效果。 核心技能部分 1.1 组合选择器 在利用CSS选择器控制HTML标签时,除了每个选择器的属性可以一次声明多个,选择器本身也可以同时声明多个,并且任何形式的选择器(包括标签选择器、class选择器、ID选择器)都是合法的。 1. 组合选择器 在声明各种CSS选择器时,如果某些选择器的风格是完全相同的,或者是部分相同,这时便可以使用组合声明的方法同时声明多个选择器。 语法: 选择器1,选择器2,选择器3…{ 属性:值; 属性:值; } 示例4.1 < html > <head><title>组合声明</title> <style type="text/css"> h1, h2, h3, h4, h5, p{ /*

python练习题-day2

て烟熏妆下的殇ゞ 提交于 2021-01-13 00:43:07
1、判断下列逻辑语句的True,False 1)1 > 1 or 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6   True 2)not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6   False 2、求出下列逻辑语句的值 1) 8 or 3 and 4 or 2 and 0 or 9 and 7   8 2) 0 or 2 and 3 and 4 or 6 and 0 or 3   4 3、下列结果是什么? 1) 6 or 2 > 1   6 2) 3 or 2 > 1   3 3) 0 or 5 < 4   False 4) 5 < 4 or 3    3 5) 2 > 1 or 6   True 6) 3 and 2 > 1   True 7) 0 and 3 > 1   0 8) 2 > 1 and 3   3 9) 3 > 1 and 0   0 10) 3 > 1 and 2 or 2 < 3 and 3 and 4 or 3 > 2   2 4、简述变量命名规范 使用字符数字和下划线随意组成的 不能使用python中的关键字 不能使用数字或数字开头的 不能太长 不能使用中文 不能毫无意义 推荐使用:小驼峰体.下划线 注意区分大小写 5、name = input(“

Django form表单

生来就可爱ヽ(ⅴ<●) 提交于 2021-01-09 04:38:59
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.。 Django form组件就实现了上面所述的功能。 总结一下,其实form组件的主要功能如下: 生成页面可用的HTML标签 对用户提交的数据进行校验 保留上次输入内容 普通方式手写注册功能 views.py # 注册 def register(request): error_msg = "" if request.method == "POST": username = request.POST.get("name") pwd = request.POST.get("pwd") # 对注册信息做校验 if len(username) < 6: # 用户长度小于6位 error_msg = "用户名长度不能小于6位" else: # 将用户名和密码存到数据库 return HttpResponse("注册成功") return render(request, "register.html", {"error_msg": error_msg}) login.html <!DOCTYPE