Entry

django基础之ORM基础知识

≡放荡痞女 提交于 2020-12-12 07:27:41
创建表(模型): 表与表之间的关系: 例如:做一个图书管理系统相关的模型 作者表:作者姓名,年龄,性别 作者详情表:生日,家庭住址,联系电话,生日。作者详情表和作者表需要绑定一对一的关系 出版社表:出版社有出版社名,地址,email 书籍表:书名,价格,出版日期书籍和作者是多对多的关系,因为一本书可以有多个作者,一个作者也可以写多本书和出版社是多对一的关系,一个出版社可以出版多本书,同一本书只能是一个出版社出版的 创建表: class Author(models.Model): nid = models.AutoField(primary_key= True) name =models.CharField( max_length=32 ) age = models.IntegerField() # 与AuthorDetail建立一对一的关系 authorDetail=models.OneToOneField(to= " AuthorDetail " ) class AuthorDetail(models.Model): nid = models.AutoField(primary_key= True) birthday = models.DateField() telephone = models.BigIntegerField() addr =models.CharField(

Spring----Bean装配

ぐ巨炮叔叔 提交于 2020-12-12 07:02:32
一、Bean种类 1、普通Bean   <bean id="" class="A"> ;spring直接创建A实例对象并且返回 2、特殊Bean   如果一个Bean实现了 FactoryBean接口,那他就是一个特殊的Bean,当spring实例化这个bean的时候,会调用 getObject() 方法,返回 getObject() 方法返回的值   这种特殊的Bean,我们一般称为FactoryBean,例如ProxyFactoryBean,表示生产proxy的Bean <bean id="" class="proxyFactoryBean">,获得的是proxyBean。(getObject()方法返回的是proxy) 补充:   FactoryBean:具有工厂生产对象的能力,但是只能生产特定的对象(典型例子SqlSessionFactoryBean),目的就是隐藏复杂的bean的配置 //举一个例子 public class UserFactoryBean implements FactoryBean<User> { @Override public User getObject() throws Exception { //进行复杂的配置 User user = new User(); return user; } @Override public Class<?>

#2020征文-开发板#SYS_RUN()和MODULE_INIT()之间的那些事

て烟熏妆下的殇ゞ 提交于 2020-12-11 09:24:39
接触鸿蒙设备开发有一段时间了,也是时候好好挖一挖鸿蒙设备程序的启动流程了。 破冰问题:鸿蒙设备程序从哪里开始运行的? 相信大家都已经非常清楚了, 鸿蒙设备程序需要指定入口函数,具体表现在代码层面就是通过语句 SYS_RUN(app_entry); 指定 ,其中 app_entry 是设备程序入口函数名;而整个鸿蒙设备的启动流程也可以顺理成章的挖掘出来。如下图: 这看起来非常完美了,解决了所有问题!可是,我觉得还是有不清楚的地方,即: MODULE_INIT(run) 干了什么事?为什么最终会调用到 app_entry() 这个入口函数? 接下来,我们逐个问题的解决! 本质问题:MODULE_INIT(run) 干了什么事? 要弄清楚这个问题,就得先来讲讲 SYS_RUN() 究竟是什么?!有同学可能会认为 SYS_RUN(app_entry); 是一个函数调用语句,将设备程序入口地址注册到系统中,进而调用。从原理上这么理解没错,可细节上根本不是那么回事! SYS_RUN() 在用法上很像函数,但本质是一个宏! 必须强调: 在 C 语言中无法在函数之外进行函数调用,而 SYS_RUN(app_entry); 出现的位置并不在任何函数中,所以它不可能是函数调用。 那会是什么呢?真相只有一个,只可能是一个定义(声明)语句。为了证明这个结论,我们将 SYS_RUN()

#2020征文-开发板# SYS_RUN()和MODULE_INIT()之间的那些事

佐手、 提交于 2020-12-10 14:12:22
接触鸿蒙设备开发有一段时间了,也是时候好好挖一挖鸿蒙设备程序的启动流程了。 破冰问题:鸿蒙设备程序从哪里开始运行的? 相信大家都已经非常清楚了, 鸿蒙设备程序需要指定入口函数,具体表现在代码层面就是通过语句 SYS_RUN(app_entry); 指定 ,其中 app_entry 是设备程序入口函数名;而整个鸿蒙设备的启动流程也可以顺理成章的挖掘出来。如下图: 这看起来非常完美了,解决了所有问题!可是,我觉得还是有不清楚的地方,即: MODULE_INIT(run) 干了什么事?为什么最终会调用到 app_entry() 这个入口函数? 接下来,我们逐个问题的解决! 本质问题:MODULE_INIT(run) 干了什么事? 要弄清楚这个问题,就得先来讲讲 SYS_RUN() 究竟是什么?!有同学可能会认为 SYS_RUN(app_entry); 是一个函数调用语句,将设备程序入口地址注册到系统中,进而调用。从原理上这么理解没错,可细节上根本不是那么回事! SYS_RUN() 在用法上很像函数,但本质是一个宏! 必须强调: 在 C 语言中无法在函数之外进行函数调用,而 SYS_RUN(app_entry); 出现的位置并不在任何函数中,所以它不可能是函数调用。 那会是什么呢?真相只有一个,只可能是一个定义(声明)语句。为了证明这个结论,我们将 SYS_RUN()

Java容器(List、Set、Map)知识点快速复习手册(中)

余生长醉 提交于 2020-12-09 10:35:04
前言 本文快速回顾了Java中容器的知识点,用作面试复习,事半功倍。 上篇:主要为容器概览,容器中用到的设计模式,List源码 中篇:Map源码 下篇:Set源码,容器总结 其它知识点复习手册 Java基础知识点面试手册(上) Java基础知识点面试手册(下) Java容器(List、Set、Map)知识点快速复习手册(上) HashMap http://wiki.jikexueyuan.com/project/java-collection/hashmap.html 源码分析: https://segmentfault.com/a/1190000014293372 关键词 初始容量16 扩容是2倍,加载因子0.75 头插法 0桶存放null 从 JDK 1.8 开始,一个桶存储的链表长度大于 8 时会将链表转换为红黑树(前提:键值对要超过64个) 自动地将传入的容量转换为2的幂次方 保证运算速度:确保用位运算代替模运算来计算桶下标。hash& (length-1)运算等价于对 length 取模。 hash均匀分布:数据在数组上分布就比较均匀,并且能够利用全部二进制位,也就是说碰撞的几率小, table数组+Entry []链表(散列表),红黑树 扩容操作需要把键值对重新插入新的 table 中,重新计算所有key有特殊机制(JDK1.8后) 存储结构

Java编程思想 | 第8章 对象的容纳

懵懂的女人 提交于 2020-12-07 20:12:43
8.1 集合类 1、集合(Collection):一组单独的元素,通常应用了某种规则。在这里,一个List(列表)必须按特定的顺序容纳元素,而一个Set(集)不可包含任何重复的元素。 2、映射(Map):一系列"键 - 值"对。从表面看,这似乎应该成为一个"键 - 值"对的"集合",但假若视图按照那种方式实现它,就会发现实现过程相当笨拙。这进一步证明了应该分离成单独的概念。另一方面,可以方便地查看 Map 的某个部分。只需创建一个集合,然后用它表示那一部分即可。这样一来,Map 就可以返回自己键的一个Set、一个包含自己值的List 或者包含自己“键-值”对的一个List。和数组相似,Map 可方便扩充到多个“维”,毋需涉及任何新概念。只需简单地在一个Map 里包含其他 Map(后者又可以包含更多的Map,以此类推)。 虚线框代表“接口”,点线框代表“抽象”类,而实线框代表普通(实际)类。点线箭头表示一个特定的类准备实现一个接口(在抽象类的情况下,则是“部分”实现一个接口)。双线箭头表示一个类可生成箭头指向的那个类的对象。例如,任何集合都可以生成一个反复器(Iterator),而一个列表可以生成一个ListIterator(以及原始的反复器,因为列表是从集合继承的)。 8.1.1 使用 Collections boolean add(Object) *保证集合内包含了自变量

多线程容易产生的40个问题汇总

半城伤御伤魂 提交于 2020-12-07 05:46:29
这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也有、也可能有些各位网友也都看过,但是本文写作的重心就是 所有的问题都会按照自己的理解回答一遍,不会去看网上的答案 ,因此可能有些问题讲的不对,能指正的希望大家不吝指教。 40个问题汇总 1、多线程有什么用? 一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓”知其然知其所以然”,”会用”只是”知其然”,”为什么用”才是”知其所以然”,只有达到”知其然知其所以然”的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法: (1)发挥多核CPU的优势 随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。 单核CPU上所谓的”多线程”那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程”同时”运行罢了 。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。 (2)防止阻塞 从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势

Redis 那么快之底层 ziplist 的奥秘!

主宰稳场 提交于 2020-12-07 05:41:12
Java技术栈 www.javastack.cn 关注阅读更多优质文章 作者:CodeBear 来源:www.cnblogs.com/CodeBear/p/13446015.html Redis 之所以那么快,还有一个很重要、但是经常被大家忽视的一点,那就是 Redis 精心设计的数据结构,本文给大家介绍下 Redis 另外一种底层数据结构: ziplist 。 在 Redis 中,有五种基本数据类型, 除了 String,还有list,hash,zset,set ,其中list,hash,zset都间接或者直接使用了ziplist,所以说理解ziplist也是相当重要的。 ziplist是什么意思 我刚开始看ziplist的时候,总觉得zip这个单词甚是熟悉,好像在日常使用电脑的时候经常看到, 就是“压缩”的意思,那ziplist就可以翻译成“压缩列表”了。 为什么要有ziplist 有两点原因: 普通的双向链表,会有两个指针,在存储数据很小的情况下,我们存储的实际数据的大小可能还没有指针占用的内存大,是不是有点得不偿失?而且 Redis 是基于内存的,而且是常驻内存的,内存是弥足珍贵的,所以 Redis 的开发者们肯定要使出浑身解数优化占用内存,于是,ziplist出现了。 链表在内存中,一般是不连续的,遍历相对比较慢,而ziplist可以很好的解决这个问题。

Redis学习之dict字典源码分析

╄→гoц情女王★ 提交于 2020-12-06 18:25:54
字典,又叫映射,是一种用于保存键值对的抽象数据结构 划重点:抽象数据结构 Redisd字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表结点,而每个哈希表结点就保存了字典中的一个键值对 一.哈希表结构 // dictht 哈希表 // 每个字典都使用两个哈希表,从而实现渐进式 rehash typedef struct dictht { // 这是字典的头部 // 哈希表数组, 每个元素都是一条链表 dictEntry ** table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 // 总是等于 size - 1 unsigned long sizemask; // 该哈希表已有节点的数量 unsigned long used; } dictht; table数组:存放键值对结点 size:哈希表大小,无符号long型 sizemark:恒等于size-1,这个值和哈希值一起决定一个键应该被放到table数组的那个索引上面 used:记录哈希表目前已有键值对的数量 字典使用两个哈希表,从而实现渐进式的rehash扩容! 二.哈希结点结构 // dictEntry 哈希表节点 typedef struct dictEntry { // 键 void * key; // 值 union { // 值v的类型可以是以下三种类型

Redis源码剖析之字典(dict)

强颜欢笑 提交于 2020-12-06 18:12:45
Dict在redis中是最为核心的一个数据结构,因为它承载了redis里的所有数据,你可以简单粗暴的认为redis就是一个大的dict,里面存储的所有的key-value。 redis中dict的本质其实就是一个hashtable,所以它也需要考虑所有hashtable所有的问题, 如何组织K-V、如何处理hash冲突、扩容策略及扩容方式…… 。实际上Redis中hashtable的实现方式就是普通的hashtable,但Redis创新的引入了 渐进式hash 以减小hashtable扩容是对性能带来的影响,接下来我们就来看看redis中hashtable的具体实现。 Redis中Dict的实现 dict的定义在dict.h中,其各个字段及其含义如下: typedef struct dict { dictType *type; // dictType结构的指针,封装了很多数据操作的函数指针,使得dict能处理任意数据类型(类似面向对象语言的interface,可以重载其方法) void *privdata; // 一个私有数据指针(privdata),由调用者在创建dict的时候传进来。 dictht ht[2]; // 两个hashtable,ht[0]为主,ht[1]在渐进式hash的过程中才会用到。 long rehashidx; /*