穿越 java | 快速入门篇 - 第1节 计算机基础知识

开发环境

基于:IntelliJ IDEAMaven构建工具JDK1.8Spring4.3.28编写。

更多干货

《穿越 Java 第一章 - 快速入门篇》《穿越 Java 第十三章 - Spring 基础篇》
《穿越 Java 第二章 - 安装配置篇》《穿越 Java 第十四章 - Spring 核心篇》
《穿越 Java 第三章 - 基础语法篇》 《穿越 Java 第十五章 - Spring 集成篇》
《穿越 Java 第四章 - 核心语法篇》《穿越 Java 第十六章 - Spring Mvc篇》
《穿越 Java 第五章 - 关键字篇》
《穿越 Java 第六章 - 工具类篇》
《穿越 Java 第七章 - 集合容器篇》《穿越 Java 第十七章 - MyBatis 篇》
《穿越 Java 第八章 - 并发编程篇》《穿越 Java 第十八章 - SpringBoot篇》
《穿越 Java 第九章 - 异常处理篇》
《穿越 Java 第十章 - 网络协议篇》
《 穿越 Java 第十一章 - 网络 IO 篇 》《穿越 Java 第十九章 - SpringCloud 体系篇》
《 穿越 Java 第十二章 - J V M 篇 》《穿越 Java 第二十章 - SpringCloud Alibaba体系篇》
《 穿越 Java 第十三章 - Mysql 篇 》《穿越 Java 第二十一章 - Git 版本管理篇》
《 穿越 Java 第十四章 - Redis 篇 》《穿越 Java 第二十二章 - Maven构建工具篇》
《穿越 Java 第十五章 - Linux篇》《穿越 Java - 轻 松 搞 定 面 试》
《穿越 Java 第十六章 - Nginx篇》《穿越 Java - Web基础篇 》
《穿越 Java 第十七章 - 设计原则篇》
《穿越 Java 第十八章 - 设计模式篇》

定义

首先 认识一下计算机

先copy一段百度百科的话

计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。

作用

计算机的作用有哪些?
计算机: 输入指令和数据,经过处理后,产生有用的信息。

组成元件

计算机组成元件: 输入单元(鼠标、键盘、触摸板等)、cpu、显卡、主板、内存、硬盘、输出设备(显示器等)、各种接口设备(声卡、网卡等)。

CPU

根据指令集分为2种,精简指令集(R·ISC)和复杂指令集(C·ISC)。

  • 【精简指令集】
    指令数较少,每条指令执行时间很短,完成的操作也很单一,要完成复杂操作需要多条指令。
    IBM的PowerPC(ps3等使用)和ARM系列(手机、路由器等使用)的cpu使用的是这种指令集。

  • 【复杂指令集】
    指令数很多而且都比较复杂,每条指令执行时间较长,能处理的工作比较丰富。
    AMD、Intel等X86架构的cpu使用这种指令集。

  • x86架构:指Intel最早开发出来的cpu叫8086,后开又有80286、80386等,
    所以这种架构的cpu就被称为了x86架构。

内存

cpu所有数据都来自内存

  • 内存的主要组成部分是动态随机访问内存(D·RAM),通电时才能使用,断电后数据消失。

  • 内存容量越大越好,因为所有数据都要加载到内存里才能被cpu读取。

  • 如果现在要加载大量数据到内存里,如果内存没有足够容量就只能释放暂时不用的内存,而释放内存可能会消耗一定的cpu时间,导致系统卡顿。

  • 内存频率最好和所使用的cpu的外频一样。

cpu里的高速缓存

cpu的数据是通过北桥从内存里读出来的,如果不通过北桥,
直接在cpu内部读取就会快很多,因此有了cpu高速缓存。
由于高速缓存在cpu内,要与cpu总体工作频率一致,
D·RAM不支持,需要静态随机访问内存(S·RAM)。

BIOS软件(基础输入输出系统)

BIOS是个程序,管理系统信息、进行开机自检等功能。
bios程序写死在在主板的一个内存芯片里(ROM),ROM芯片没有通电也能记录数据(相当于硬盘)。

CMOS芯片
  • 是一个主板上的可读写的RAM芯片(RAM断电数据消失,所以CMOS有单独的电池)。
  • 这个芯片记录了硬件的各项参数。CMOS的设置通常被写进BIOS里。

机械硬盘

组成

由盘片、机械手臂、磁头和主轴马达组成。

  • 盘片:通常是铝合金圆盘,上面涂了磁性材料。

  • 磁道:每个盘片分成了多个同心圆形的磁道,每个同心圆磁道一般可以存储几kB的。

  • 扇区:每个磁道又平分为多个块,这个块就叫扇区。
    扇区是机械硬盘上存储的物理单位,每个扇区可以存储512字节的数据。
    (z注意h,即使只需要某个字节,也要把扇区里的512B的数据都读出来)

  • 柱面:指不同盘片上的同一个位置的磁道组成的一个面,是一种逻辑上的概念。
    磁盘数据的读写是按柱面进行的,每次从柱面上的第一个磁头开始读写,
    直到柱面上所有磁头都读写完成,磁盘才移到下一柱面。

数据存取过程

主轴马达转动盘片,机械手臂移动磁头在盘片上方(间距不到1微米)来回移动,磁头读写盘片。

文件编码

计算机只会使用0/1记录数据,那人一般是看不懂的,需要把0/1转换一下,转为人能理解的字码。

所以写入数据时,会把字码根据字码对照表(编码系统)转换为0/1,再存入文件。同理,读取文件时,也是读取一堆0/1数据,转换为字码后,展示到屏幕上。

ASCII

常用的编码表是ASCII码,每个符号(英文、数字、符号)占用1B(8bit),
总共会有2的8次幂种组合,所以这种编码只支持256个字符。

GBK

中文用的最多的编码系统是GBK,是对ASCII码的扩展
GBK会有2的16次幂=65532种组合,理论可以表示6万多个中文。

UTF-8

但是各国的文字都不一样,为了统一编码,
出现了全球统一编码Unicode编码,日常使用UTF-8。

工作流程

计算机工作流程: 数据经过输入单元输入到内存里,cpu读取内存数据,进行处理后,写入内存,然后传给输出单元或者存储在本地硬盘里。

计算单位

计算机使用的计算单位:bit(比特),即单个的0或者1。

  • 之所以用这种单位,是因为计算机是根据有没有通电来记录信息的,通电就是1,没通电就是0。
    不断的通断电,记录一串0/1,就是在记录数据。

  • 由于0/1这个单位太小了,日常记录数据都是成千上万个bit,
    所以一般会使用另一个单位:字节Byte,1个字节=8个比特,即1B=8b。

  • 但是由于Byte也很小,所以更常用的是KB,即1024B,或者MB,即1024KB=1024*1024B。

架构和接口设备

主板上有2个桥接器,北桥连接cpu、内存、显卡,南桥连接硬盘、USB、网卡等。

  • cpu有2个主要单元:算数逻辑单元和控制单元。

  • 算数逻辑单元:主要负责程序运算和逻辑控制。

  • 控制单元:主要用于协调各组件与各单元间的工作。

  • 决定性能的因素:指令集和频率(即每秒可以进行的工作次数)
    cpu的频率分外频和倍频,二者相乘才是cpu的频率。

  • 外频:cpu与外部组件进行数据传输/运算时的速度。

  • 倍频:即内频,cpu内部用来加速工作性能的一个倍数

cpu分32位和64位,怎么理解?

cpu每次能处理的数据量成为字组大小,如果一次能处理32位的数据,就称该cpu是32位的,能处理64bit即64位的cpu。

软件程序运行

要使用计算机,需要工程师编程,写代码操作cpu,调用各种硬件,但是这样做有缺点

  • 计算机只能识别0/1,要使用这种机器码编程,很难。

  • 机器码与cpu的指令集耦合性太强,换个机器,又要重新编写代码,成本太高。

为了解决上诉问题,设计了一些人能看得懂的程序语言

  • c 、java、python等,然后使用编译器将这些语言翻译成机器懂的机器码。

  • 现在有了易懂的编程语言,但是很多功能老是要写一些涉及底层硬件基础交互的重复代码,就很耗时间。

  • 所以将与底层硬件打交道的事情统一封装起来,只暴露相关功能的接口给开发者调用,就方便多了。

这个封装好的程序就是操作系统,包括:

  • 内核:负责驱动硬件,分配cpu资源,管理内存、文件。
  • 一堆开发接口:方便开发者调用内核。
  • 操作系统可以管理计算机所有活动和驱动系统中的所有硬件。
  • 比如让驱动内存读取数据,驱动硬盘读写数据,驱动网卡传输数据等。
  • 这个内核程序开机后常驻在内存中。
  • 现在有了能管理硬件的操作系统。
  • 但是操作系统只是能管理而已,有了操作系统只是准备妥当,
  • 如何管理,如何使用硬件去实现各种功能要靠软件来决定。
  • 所以软件就是开发者参考操作系统提供的接口,做出来让用户操作计算机的东西。

计算机从出现至今,经历了机器语言、程序语言、简单操作系统和Linux、Macos、BSD、Windows等现代操作系统四代,运行速度也得到了极大的提升,第四代计算机的运算速度已经达到几十亿次每秒。计算机也由原来的仅供军事科研使用发展到人人拥有,计算机强大的应用功能,产生了巨大的市场需要,未来计算机性能应向着微型化、网络化、智能化和巨型化的方向发展。

总结:

待完善…

目前很多大佬都写过关于本教程了,如有雷同,请多多包涵.

<think>嗯,用户问的是关于数据库表结构设计中的用户、评分和电影之间的多对多关系。首先,我需要回忆一下数据库设计的基本概念。多对多关系通常需要通过中间表来解决,所以这里可能需要一个评分表来连接用户和电影。 用户提到的用户表、电影表和评分表,我应该先确认每个表的字段。用户表应该包含用户的基本信息,比如用户ID、昵称、生日、性别等。电影表则需要电影ID、名称、上映时间、类型等。评分表作为中间表,需要有用户ID、电影ID和评分值,可能还包括评分时间。 接下来要考虑主键和外键的设置。用户表的主键是用户ID,电影表的主键是电影ID。评分表的主键可以是复合主键,由用户ID和电影ID组成,这样确保每个用户对同一部电影只能评分一次。同时,这两个字段也是外键,分别引用用户表和电影表的主键。 还要考虑索引的问题,比如在评分表中对用户ID和电影ID建立索引,可以加快查询速度。此外,是否需要其他字段,比如评分时间,这取决于需求,但加上去会更全面。 然后,可能需要用SQL语句来创建这些表,演示如何实际建表。例如,用户表的创建语句包括用户ID作为主键,其他字段如昵称、生日等。评分表则需要定义外键约束,确保数据的完整性。 可能还需要举一个查询的例子,比如查询某个用户的评分记录,或者某部电影的平均评分,这样用户能更好地理解表结构如何应用。比如使用JOIN操作连接三个表,计算平均分。 另外,用户之前的引用中提到过Person表有用户ID、昵称、生日等信息,Movie表有电影名、评分等,还有Comment和Advise表。但当前问题集中在用户、电影和评分的关系,所以可能需要专注于这三个表的设计,同时简要提到其他相关表如评论、权限等,但不需要深入。 还要注意用户可能的需求扩展,比如除了评分,还有评论、收藏等功能,这些可能需要其他表,但当前问题只需处理多对多评分关系。不过可以稍微提一下,以便用户了解整体结构。 最后,确保回答符合用户的要求:结构清晰,使用中文,正确使用LaTeX格式,生成相关问题。可能需要检查LaTeX语法是否正确,比如表名使用$...$,独立公式用$$...$$,但这里可能更多是表格结构,用文本描述即可。</think>### 数据库多对多关系表结构设计 #### 1. 用户-电影-评分关系分析 用户与电影之间通过评分行为形成**多对多关系**,即: - 一个用户可以给多部电影评分 - 一部电影可以被多个用户评分 #### 2. 基础表设计 需创建三个核心表并建立关联: 1. **用户表 (Person)** ```sql CREATE TABLE Person ( user_id INT PRIMARY KEY, nickname VARCHAR(50), birthday DATE, gender ENUM('男','女','其他'), user_type ENUM('普通用户','管理员') ); ``` 字段说明:$user\_id$ 为主键[^1] 2. **电影表 (Movie)** ```sql CREATE TABLE Movie ( movie_id INT PRIMARY KEY, title VARCHAR(100), release_date DATE, genre VARCHAR(50), avg_rating DECIMAL(3,1) ); ``` 字段说明:$avg\_rating$ 可动态计算或冗余存储[^3] 3. **评分表 (Rating)** ```sql CREATE TABLE Rating ( user_id INT, movie_id INT, rating DECIMAL(2,1) CHECK (rating BETWEEN 0 AND 5), rating_time TIMESTAMP, PRIMARY KEY (user_id, movie_id), FOREIGN KEY (user_id) REFERENCES Person(user_id), FOREIGN KEY (movie_id) REFERENCES Movie(movie_id) ); ``` 关键设计: - 复合主键 $(user\_id, movie\_id)$ 防止重复评分 - 外键约束保证数据完整性 - 评分值约束 $0 \leq rating \leq 5$ #### 3. 关系示意图 ```mermaid erDiagram Person ||--o{ Rating : "1:N" Movie ||--o{ Rating : "1:N" Person { INT user_id PK VARCHAR(50) nickname DATE birthday ENUM gender ENUM user_type } Movie { INT movie_id PK VARCHAR(100) title DATE release_date VARCHAR(50) genre DECIMAL(3,1) avg_rating } Rating { INT user_id PK,FK INT movie_id PK,FK DECIMAL(2,1) rating TIMESTAMP rating_time } ``` #### 4. 典型查询示例 1. 查询用户ID=1001的评分记录: ```sql SELECT m.title, r.rating FROM Rating r JOIN Movie m ON r.movie_id = m.movie_id WHERE r.user_id = 1001; ``` 2. 计算《星际穿越》的平均评分: ```sql SELECT AVG(rating) FROM Rating WHERE movie_id = (SELECT movie_id FROM Movie WHERE title = '星际穿越'); ``` #### 5. 扩展设计建议 - 添加索引:在$Rating(user\_id)$和$Rating(movie\_id)$字段创建索引加速查询 - 历史记录:通过$rating\_time$字段追踪评分时间序列 - 数据一致性:使用触发器自动更新Movie表的$avg\_rating$字段
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值