程序设计
单点登录设计方案有:
模式
优点
缺点
共享Cookie模式
简单方便,用户体验好
根域名需一致;Cookie可能不安全
OAuth2.0模式
灵活安全,不受站点限制
成本稍高,需独立的认证中心
跨域设置Cookie
用户体验好,不受站点限制
比较麻烦;Cookie可能不安全
客户端模式
用户体验好,不受站点限制
成本极高,依赖于用户本地安装客户端应用
共享Cookie: 要求网站的根域名必须一致,如 a.zzc.com,b.zzc.com,d.zzc.com,根域名都是zzc.com,则写入Cookie时只写入根域名。
IM即时通信
运行须知:
关闭电脑端的防火墙(来宾或公用网络)
电脑与手机处于同一局域网内(开热点,或连同一个网络)
前端访问的ip地址为热点网络的ip地址
如果前端需要访问电脑虚拟机中的服务,需要在虚拟机:编辑-网络编辑器-NAT设置-端口转发 中设置主机到虚拟机的端口转发。
IM服务端-理论实现消息通信服务端负责转发用户消息,以及消息回执(确认应答)。
文本消息类ChatMsg:
1234567message ChatMsg{ id = 1; //消息id fromId = Alice //发送者userId destId = Bob //接收者userId msgBody = hello //消息体}
消息回执类AckMsg:
123456789101112message AckMsg { id; //消息id fromId; //发送者id destId; //接收者id msgType; //消息类型 ackMsgId; //确认的消息id ...
知识点—框架
SpingSpring 是一款开源的轻量级 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。
一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。
IoCInversion of Control,控制反转,是一种设计思想,而不是具体的思想。 其思想就是将原本在程序手中手动创建对象的控制权,交由Spirng框架来管理。
控制: 指的是对象创建(实例化、管理)的权利。
反转:将控制权交给外部环境。
Spring对IoC思想的实现:
提供了IoC容器,充当“外部”:
IoC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在Ioc容器中统称为 Bean。
IoC容器实际上是个Map,Map中存放的是各种对象。
提供实现方式: 依赖注入(DI,Dependency Injection):
在容器中建立bean与bean之间的依赖关系,直接将对象作为外部输入传递给组件,就是依赖注入。
IoC容器容器管理着 Bean 的生命周期,控制着 Bean 的依赖注入,可以说容器是Spri ...
知识点—数据库
SQL数据库基本概念
元组 : 关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
码 :码就是能唯一标识实体的属性,对应表中的列。
候选码 : 若关系中的某一属性或属性组的值能唯一的标识一个元组,而它的任何子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。
主码 : 主码也叫主键。主码是从候选码中选出来的。 一个实体集中只能有一个主码,但可以有多个候选码。
外码 : 外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
主属性 : 候选码中出现过的属性称为主属性。比如关系 工人(工号,身份证号,姓名,性别,部门). 显然工号和身份证号都能够唯一标示这个关系,所以都是候选码。工号、身份证号这两个属性就是主属性。如果主码是一个属性组,那么属性组中的属性都是主属性。
非主属性: 不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生(学号,姓名,年龄,性别,班级 ...
知识点—Java
基础知识基础概念
JDK (Java Development Kit):Java开发组件
JRE (Java Runtime Environment):Java运行时环境, 它是运行已编译Java程序所需的所有内容的集合,包括JVM,Java类库,Java命令和其他一些基础构建。但不能用于创建新程序。
JVM(Java Virtual Machine): Java虚拟机是运行Java字节码的虚拟机,有针对不同系统的特定实现,目的是使用相同的字节码,都会给出相同的结果。(最常用HotSpot VM)
字节码: 即JVM可以理解的代码(.class文件),由于字节码只面向虚拟机,因此Java程序无需重新编译即可在不同操作系统上运行。
Java程序运行流程:
.java文件(源代码)——经过javac编译——得到 .class文件(字节码)——经过 解释器&JIT(即时编译器) 解释/编译 —— 得到机器可理解的代码
在字节码到机器码这一步,JVM类加载器首先加载字节码文件,然后使用解释器逐行解释。 而对于一些热点代码,会使用JIT即时编译器,将字节码对应的机器码 ...
RPC框架
RPC简介Remote Procedure Call, 远程过程调用
作用: 当调用的方法在其他服务器上时,就需要网络编程才能传递方法调用所需的参数,且方法调用的结果也要网络编程来接收。 所以,RPC就是用来方便的调用远程计算机上某个服务的方法, 像调用本地方法一样简单。
原理:
客户端(服务消费端):调用远程方法的一端;
客户端Stub(桩) :把调用的方法的信息和参数等传递给服务端。
网络传输: 实现方法如基本的Socket,封装优秀的Netty。
服务端Stub:根据传递过来的信息调用本地的方法, 得到结果后进行封装并发送至消费方。
服务提供端:执行请求的方法。
一般的,RPC框架不仅有服务发现的功能,还有负债均衡、容错等功能。简单的结构如下:
服务提供端Server向注册中心 注册服务;
服务消费端Client通过注册中心拿到相关信息,然后通过网络请求服务提供端Server;
完整的RPC框架结构:
调用关系:
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者的地址列表给消 ...
SpringCloud微服务
练习需启动的软件:
nacos:到nacos的bin目录下,输入: startup.cmd -m standalone(单机启动)
到sentinel的jar包目录下,输入:java -jar sentinel-dashboard-1.8.1.jar 运行sentinel
技术路线
微服务技术
1 微服务治理 —— 注册发现、远程调用、配置管理、网关路由
6 微服务保护 —— 流量控制、系统保护、熔断降级、服务授权
7 分布式事务 —— 分布式事务、TCC模型、AT模型、Seata
异步通信技术
3 异步通信 —— MQ消息模型、SpringAMQP、消息堆积问题、数据持久化
10 可靠消息服务 —— 消息可靠性、镜像集群、延迟队列、消息幂等性
缓存技术
4 分布式缓存 —— Redis数据结构、SpringDataRedis、缓存穿透/雪崩…
8 多级缓存 —— OpenResty、多级缓存、缓存数据同步、Nginx本地缓存
9 Redis集群 —— 数据持久、Redis主从复制、Lua脚本、Redis集群
搜索技术
5 分布式搜索 —— DSL语句 ...
Redis学习
为什么要有redis首先要理解, 缓存就是以空间换时间,能提高系统性能和减少请求响应时间。
应用: CPU Cache缓存内存数据以解决CPU处理速度和内存访问速度不匹配的问题, 内存缓存的是硬盘数据 以解决硬盘访问速度慢的问题, 操作系统的快表也可以看作是一个缓存存储器(加快虚拟地址到物理地址的映射)。
所以在数据库之上加一层缓存,可以明显加快访问速度; 同时缓存也可以支持更大的并发量。
本地缓存
存在于应用内部,不用额外的网络开销,速度很快。 常用于数据量不大的单体架构。
常见的单体架构: 使用Nginx做负载均衡,部署若干个相同的应用到不同服务器,使用用一个数据库,并使用本地缓存。
常用的本地缓存:
jdk自带的 HashMap 和 ConcurrentHashMap, 只有缓存功能,没有过期时间、淘汰机制、命中率统计等基本功能,一般不用。
Ehcache、Guava Cache、Spring Cache:
Echcache比另两个更重,但能嵌入到hibernate和mybatis中作为多级缓存,能将缓存数据持久化到本地磁盘。
Guava Cache 和 Spring C ...
Python基础
语法基本语法
字面量:在代码中,被写下来的固定的值
数字 Number
整数 int
浮点数 float
复数 complex
布尔 bool
字符串 String
列表 List:有序的可变序列
元组 Tuple :有序的不可变序列
集合 Set
字典 Dictionary:无序Key-Value集合
注释:
单行注释: #
多行注释: “”“注释内容”“”“ (即一对三个引号)
变量: python的变量没有类型,使用时直接 : 变量名 = 赋值数据
数据类型:
使用 type() 可以查看数据类型
标识符: 对变量、方法、类等起的名字就是标识符。
标识符中不可出现关键字,大小写敏感。
Python的关键字有:
False,True,None,and,as,assert,break,class,continue,def,del,elif,except,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,or,pass,raise,return,try,while,with, ...
Nginx学习
概述简介Nginx(“engine x”)一个具有高性能的【HTTP】和【反向代理】的 【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔·赛索耶夫(俄罗斯人) 使用C语言编写的,Nginx的第一个版本是 2004年10月4号发布的0.1.0版本。
正向代理 代理的是 客户端。
反向代理 代理的是 服务端。
Nginx的优点
速度更快、并发更高——
单次请求或者高并发请求的环境下,Nginx都会比其他Web服务器响应 的速度更快。一方面在正常情况下,单次请求会得到更快的响应,另一方面,在高峰期 (如有数以万计的并发请求),Nginx能比其他Web服务器更快地响应请求。Nginx之所以有这么高的并发处理能力和这么好的性能,原因在于Nginx采用了多进程和I/O多路复用 (epoll)的底层实现。
配置简单,扩展性强 ——
Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使 用可以通过配置文件的配置来添加。这些模块有官方提供的、也有第三方提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。
...
算法-题
剑指offer03-数组中重复的数字(E)找出数组中重复的数字。
在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。
123456输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3 限制:2 <= n <= 100000
解:
只需返回第一个出现重复的数字即可。使用集合存储已经遇到的数字,如果遇到的一个数字已经在集合中,则当前的数字是重复数字。
12345678910111213class Solution { public int findRepeatNumber(int[] nums) { Set<Integer> set = new HashSet<Integer>(); int repeat = -1; for (int num : nums) { if (!set.add(num)) ...
算法2.0
位运算右移 >> 和 >>>
>> 是带符号右移,用符号位补位
>>> 是不带符号右移,用0补位
123456789//Integer.MIN_VALUE 的十进制和二进制-214748364810000000000000000000000000000000//Integer.MIN_VALUE >> 1 的十进制和二进制-107374182411000000000000000000000000000000//Integer.MIN_VALUE >>> 1 的十进制和二进制107374182401000000000000000000000000000000
例1:打印一个数字的32位二进制形式:
123for (int i = 31; i >= 0; i--) { System.out.print((n & (1 << i)) == 0 ? '0' : '1');}
例2: Integer.MIN_V ...
实践问题bug
网页问题VUE
get请求的参数中带有英文点号,导致的请求错误:
在Spring MVC框架中,会将地址中的最后一个点号截断为后缀名,从而判断其请求消费的内容类型,在不改变此策略的情况下,修改请求方式与地址也能达到正确处理的目标。
如果请求的url中带有含有 英文点号 的参数,如地址、邮箱等,可以在请求方式中最后再加一个点号,或者修改后端的MVC框架策略,或者将 @PathVariable改为@RequestParam
vue中设置 <form @submit.prevent> ,取消表单提交后的默认跳转
如果出现未使用变量报错,这是因为项目中使用eslint校验规范,它要求没用的就不要定义,定义了就要用。 若要关闭该报错,可在package.json中加入以下代码,然后重启项目:
12345678{ ....{ ... }, "rules": { "no-unused-vars": "off", }}
或者在未使用变量上注释: ...
Java—SpringBoot&MybatisPlus
SpringBoot2
springboot在版本3以上最低支持jdk17,所以jdk8只能用springboot2.x.x
注意: 导入他人的项目,如果依赖成功加载,却仍显示找不到,可以在 文件—清除缓存,并重启。
概念SpringBoot 对 spring 的简化,也是其核心功能和优点:
起步依赖
自动配置
辅助功能(内置服务器….)
具体体现在:
parent
starter
引导类
内嵌tomcat
parent由于依赖的版本之间有一定的固定搭配,所以 SpringBoot 制作了多个技术版本搭配的列表,就叫做 parent。所以 ,使用parent可以帮助开发者进行版本的统一管理。
在pom.xml中继承了一个坐标:
12345<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.4</ver ...
计算机网络2.0
TCP/IP网络模型应用层用户直接接触到的就是应⽤层(Application Layer),当两个不同设备的应⽤需要通信的时候,应用就把应用数据传给下⼀层,也就是传输层。
所以,应用层只需要专注于为用户提供应用功能,不用去关心数据是如何传输的。
应⽤层是⼯作在操作系统中的⽤户态,传输层及以下则⼯作在内核态。
传输层传输层(Transport Layer)是为应用层提供网络支持的。
传输层有两个重要协议:TCP和UDP
TCP —— 传输层控制协议(Transmission Control Protocol)
大部分应用使用的正是 TCP 传输层协议,比如 HTTP 应用层协议。TCP 相比 UDP 多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证 数据包能可靠地传输给对方。
UDP —— 用户数据报协议(User Datagram Protocol)
UDP 就相对很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率 也高。
MSS —— TCP最大报文段长度
当传输层的数据包大小超过 MSS(TCP 最大报文 ...
Java设计模式
概述软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。
也就是说,它是解决特定问题的一系列套路,是历来 代码设计经验的总结,具有一定的普遍性,可以反复使用。
UML类图统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统一、图形化、能表达软件设计中的动态与静态信息。
UML 从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等 9 种图。
类图
在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解;
类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型。
用类图表示类:
在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示,如:
Employee
- name : Str ...
微信小程序
概述项目结构小程序的项目结构
目录pages:存放所有小程序的页面
目录utils:用来存放工具性质的模块(如格式化时间的自定义模块)
app.js :小程序项目的入口文件
app.json:小程序项目的全局配置文件
app.wxss:全局样式文件
project.config.json:配置文件
sitemap.json:配置小程序页面是否允许被微信索引。
存放在pages目录下的每个页面,都由四个基本文件组成:
.js文件 —— 存放页面的数据,事件处理函数等
.json文件 —— 配置文件,配置窗口外观等
.wxml文件 —— 结构文件
.wxss文件 —— 样式表文件
app.jsonapp.json 是当前小程序的全局配置,包括了小程序的所有页面路径、窗口外观、界面表现、底部 tab 等。
pages:用来记录当前小程序所有页面的路径,首页为排第一位的页面。
window:全局定义小程序所有页面的背景色、文字颜色等
style:全局定义小程序组件所使用的样式版本
sitemapLocation:用来指明 sitemap.json 的位置
tabbar:定义底部tab ...
快捷键
Win 10 快捷键win + shift + s 截图
fvimium快捷键页面操作j: 向下移动。k:向上移动。(不明白默认的表示是啥用法,使用了c-y这三个键没有效果)h:向左移动。l:向右移动。zH:一直移动到左部。zL:一直移动到右部。gg:跳转到页面的顶部。G:跳转到页面的底部。d:向下翻页(相当于PageDown被按下了)u:向上翻页(相当于PageUp被按下了)r:重新载入该页(相当于F5刷新页面)gs:查看页面源代码yy:拷贝当前页面的URL到剪贴板yf:拷贝某一个URL到剪贴板(实际上是相当于输入了f,然后出现很多编码的URL,选择某个之后,相当于拷贝了某个,因为一个页面中可能有很多超链接)gu:跳转到父页面(比如http://www.douban.com/group/vim/,输入后跳转到父页面即http://www.douban.com/group/,所以不同于H的快捷键是回到上个历史页面)
i:输入模式(如果发现命令不起作用,可能是进入输入模式了,此时按Esc回到命令模式)gi:将焦点集中到第一个输入框(输入gNi则焦点集中到第N个输入框)f:在当前的页面打 ...
面试实习
四要素:
简历,面经,知己知彼,录音设备
简历:
(不会的东西不要写,趋利避害,自己框个考试范围;可以自己先维护一份理想中的简历,并面向简历去学习)
(跳槽相关,准备一份没有期望薪资的 简历,给技术面试官)
面经:
知己知彼:了解公司主要业务,主打产品,公司发展历程,准备一个跟公司业务相关的问题
录音:弄懂面试中不懂的问题,吸取经验;可以发现一些不易察觉的问题,如表达方式,用词习惯,语速,音量(沟通能力,表达能力在工作中可能比技术更重要)
自我介绍环节:尽量亲和
自我介绍三要素:秀优势(避免面试官忽略你的优势),套近乎(将收集到的公司情报用两三句话组织一下,自然点),摆技术(擅长的,如果能和面试官聊起来,成功率会上升,同时将自己不会的问题引导到自己较擅长的)
问完技术后,可能会问项目(能简单但详细阐明项目的主要业务,自己觉的项目亮点在哪,遇到什么问题,如何解决,学到什么,项目细节也要注意
hr:职业生涯规划打算,表示自己对当前职业,公司,城市有长久打算。
实习途径
高校就业指导中心
实习平台
app:
实习僧,刺猬实习,拉勾网,智联招聘,前程无忧
公众号:
大学生 ...
算法题
2.两数相加(M)给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。
123输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.
模拟要注意的点:
节点和大于9,要注意进位;
最后一个节点进位要额外新加一个节点
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = va ...
git
Git概述git 是一个分布式版本控制系统,
版本控制 是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
每个客户端保存的也都是整个完整的项目 (包含历史记录,更加安全)
工作机制工作区——git add——> 暂存区——git commit——> 本地库
工作区:写代码;
暂存区:临时存储;
本地库:历史版本;
代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般称为 远程库。
局域网:GitLab
互联网:GitHub,Gitee码云
基础操作命令初始化本地仓库:git init
查看本地库状态:git status
添加暂存区:git add 文件名 (git add . //将所有修改加入暂存区)
提交本地库:git commit -m “日志信息” 文件名
工作区的文件是git对象 ...
C语言
C语言学习1章 概述注意点:
一个函数的函数体可以没有变量定义和执行部分,函数可以是空函数。
一个C程序至少包含一个主函数,即main函数。
一个函数由两部分组成,分别是函数的说明部分和函数体。
C语言通过输入和输出函数 来进行输入输出。
主函数后的圆括号内可为空,但这个圆括号不能省略。
2章 数据类型、运算符、表达式注意点:
C语言中,数据基本类型有整型,浮点型,字符型;
能表示整型常量的进制有八、十、十六进制(二进制不行);
ASCII码表:数值0——48;字母A——65;字母a——97;
所有变量,遵循先定义后使用的原则;
强制类型转换——将一个表达式转换成指定的类型;
基本类型整型
类型
存储需求
取值范围
int
4字节
-2 147 483 648 ~ 2 147 483 647(过20亿)
short
2字节
-32 768 ~ 32 767
long
8字节
-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807(过九百亿亿)
byte
1字节
-128 ~ 127
长整型数值带一 ...
Mysql
MySQLSQL分类:
DDL:数据定义语言
Data Definition Language,负责数据结构定义与库对象定义的语言,由CREATE、ALTER与DROP三个语法所组成。
DML:数据操作语言
Data Manipulation Language,负责对数据库对象运行数据访问工作的指令集,以 INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除。
DQL:数据查询语言
Data Query Language,负责进行数据查询而不会对数据本身进行修改的语句,这是最基本的SQL语句。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有FROM,WHERE,GROUP BY,HAVING和ORDER BY。
DCL:数据控制语言
Data Control Language,是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、预存程序、用户自定义函数等数据库对象的控制权。由 GRANT 和 REVOKE 两个指令组成。DCL以控制 的访问权限为主,GRANT为授权语句,对应的REVOKE是 ...
java
一些用法2. HashMap和Hashtable相同点:
hashmap和Hashtable都实现了map、Cloneable(可克隆)、Serializable(可序列化)这三个接口
不同点:
底层数据结构不同:jdk1.7底层都是数组+链表,但jdk1.8 HashMap加入了红黑树
Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null。
添加key-value的hash值算法不同:HashMap添加元素时,是使用自定义的哈希算法,而HashTable是直接采用key的hashCode()实现方式不同:Hashtable 继承的是 Dictionary类,而 HashMap 继承的是 AbstractMap 类。
初始化容量不同:HashMap 的初始容量为:16,Hashtable 初始容量为:11,两者的负载因子默认都是:0.75。
扩容机制不同:当已用容量 > 总容量 * 负载因子时,HashMap 扩容规则为当前容量翻倍,Hashtable 扩容规则为当前容量翻倍 +1。
支持的遍历种类不同:HashMap只支持 ...
Java—SSM&Maven
Maven
在pom.xml中查看依赖关系: Ctrl + Alt + Shift + u, 红线部分为冲突依赖
Maven 是专门用于管理和构建java项目的工具,它的主要功能有:
提供了一套标准化的项目结构;
提供了一套标准化的构建流程 (编译,测试,打包,发布…);
提供了一套依赖管理机制(指jar包,插件);
命令:
mvn clean:清除target目录中的结果
mvn compile: 编译源代码,生成的class文件放到target目录下
mvn test:执行单元测试
mvn package:打包
mvn install:打包并把打好的包保存到本地仓库
mvn deploy:打包并把打好的包保存到本地仓库,上传到远程仓库
分模块开发多个场景的模块代码如果放入到一个项目,那么当其中某一个模块代码出现问题,就会导致整个项目无法正常启动;而且,各个模块可以单独维护,更方便团队协作。
例子:将SSM的各层分成各个模块
步骤:
创建新模块,将对应代码拷贝进去,删除原代码;
删除domain包后项目会报红,需要在maven_ssm的pom.xml 中添加ma ...
Linux
概述linux是一个开源、兔费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目(c/c++/php/python/java/go) 都会部署到Linux/unix系统上。
常见的操作系统(windows、IOS、Android、MacOS、Linux、Unix)
linux之父:Linus Torvalds,他开发了linux0.01版源码,也是Git创作者。
Linux主要发行版本
Ubuntu(乌班图),RedHat(红帽子),CentOS,Debain,Fedora,SuSE,OpenSUSE
应用领域
linux在==服务器领域==的应用是最好的,有免费,稳定,高效的特点。
在嵌入式领域,linux运行稳定,对网络有良好支持,且低成本,能根据需求进行软件裁剪,内核最小可到几百kb。
如:机顶盒、数字电视、网络电话、远程交换机、手机、PDA、智能家居等 物联网应用。
Linux和Unix的关系Unix只针对大型主机或服务器,后来在GN ...
汇编语言
一、访问寄存器和内存前提:此汇编语言学习以 Intel 8086 CPU作为示例。
1 寄存器和数据存储寄存器是CPU内部的信息存储单元。
一个n位寄存器能存储一个n位的数据,通用寄存器常用X表示;
有时为了向下兼容,会把寄存器分为高低位,如AX 分为 AH, AL; AH表示AX的高位,AL表示AX的低位
(当AL中的数值大于AL所能表示的范围,AL会丢弃溢出位,而不会将溢出位加到AH上)
8086CPU有14个寄存器
通用寄存器:AX,BX,CX,DX(累加,基地址,计数,数据)
变址寄存器:SI,DI (源,目标)
指针寄存器:SP,BP(栈顶,基)
指令指针寄存器:IP
段寄存器:CS,SS,DS,ES(代码,数据,栈,附加)
标志寄存器:PSW
2 mov和add指令示例:
mov ax 18 - 将18放入寄存器AX中
add ax 8 - 将寄存器AX中的值加上8
mov ax bx - 将BX中的值放入寄存器AX中
add ax bx - 将AX,BX中的值相加,结果放入AX中
3 确定物理地址的方法物理地址:唯一表示每个内存单元在存储体中的地址。
...
Java Web
CS :客户端-服务器 架构模式
优点:充分利用客户端机器的资源,减轻服务器的负荷(一部分安全要求不高的计算任务存储任务放在客户端执行,不需要把所有的计算和存储都在服务器端执行,从而能櫛够减轻服务器的压力,也能够减轻网络负荷)
缺点:需要安装;升级维护成本较高;
BS:浏览器-服务器 架构模式
优点:客户端不需要安装;维护成本较低;
缺点:所有的计算和存储任务都是放在服务器端的,服务器的负荷较重;在服务端计算完成之后把结果再传输给客户端,因此客户端和服务器端会进行非常频繁的数据通信,从而网络负荷较重;
网页主要由三部分组成:
结构:HTML
表现:CSS
行为:JavaScript
HTML
Chrome浏览器调试工具:右键点“检查”,或按F12
常用标签标题标签 : < h1 > ~ < h6 >
段落标签:< p > < /p > (两段之间会插入一定的间距)
换行标签:< br >
水平分割线:< hr >
文本格式化标签:
加粗:< strong >< ...
数据结构
欠缺数组:广义表
树:层次遍历算法,线索二叉树,二叉搜索(排序)树BST,自平衡二叉树AVL(左旋右旋),B树(多路平衡查找树),B+树,——红黑树
并查集:
图:
数组 ArrarryC
使用数组中的第 i + 1 个元素:1.数组名[i] ; 或者使用指针*p = &数组: *(p +i)
C 语言不允许返回一个完整的数组作为函数的参数。
想要从函数返回一个数组,需先声明一个返回指针的函数:
123int * myFunction(){}
C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
示例(生成随机数,并用数组返回):
123456789101112131415161718192021222324252627int * getRandom( ){ static int r[10]; int i; /* 设置种子 */ srand( (unsigned)time( NULL ) ); for ( i = 0; i < 10; ++i){ r[i] = ...
算法
位运算X & -XX & -X ,即 X & (~X+1) 得到 二进制数的LowBit(其二进制最低位/最右侧的1,其余位均为0):
-X的值,是在X的基础上进行按位取反之后再加1得到的,
当X为偶数时,~X为奇数,奇数加上1会发生进位,最低位的连续的1都会变为0,所以X和 ~X的低位都为0,高位都相反,只有得到进位的那个位置都为1,即X的最右边的1相等,所以,当一个偶数与它的负值相与时, 结果是能整除这个偶数的最大的2的幂, 即: m = n & -n , 则 n % m = 0, 且 m = 2^k^
当X为奇数时,因为奇数取反后为偶数,偶数加1并不会影响进位,所以此时 X & -X 结果一定为1(奇数最低位的1就在二进制数的末尾)
X = X & (X - 1)该运算可以将 xxx 的二进制表示的最后一个 1 变成 0。
重复n次该运算,X最终变为0, n即为X二进制表示中的1的个数。
当 X & (X−1) = 0 时,意味着X的二进制表示只有一个1,且在 ...
计算机组成原理
一、计算机组成概论硬件组成早期冯诺依曼机
由五大部件组成;
指令和数据以同等地位存储于存储器,可按地址寻访;
指令和数据用二进制表示;
指令由操作码和地址码组成;
提前把程序放到存储器中;
以运算器为中心;(输入/输出设备与存储器之间的数据传送通过运算器完成)
在计算机系统中,软件和硬件在逻辑上是等效的。例如:对于乘法运算,可以设计一个专门的硬件电路实现乘法运算,也可以用软件的方式,执行多次加法运算来实现。
现代计算机
以存储器为中心,CPU = 运算器+控制器;
CPU、存储器及工作过程CPU
运算器
ALU:算数逻辑单元(Arithmetic and Logic Unit)(组合逻辑),通过内部复杂的电路实现算数运算、逻辑运算;
MQ:乘商寄存器(Multiple-Quotient Register),在乘除运算时,用于存放操作数或运算结果;
ACC:累加寄存器(Accumulator),用于存放操作数,或运算结果;
X:通用寄存器(有很多个,X只是指在用其中某一个),用于存放操作数;
PSW:程序状态寄存器,存放状态信息和控制信息(Pr ...
操作系统
一、初识操作系统操作系统是什么?操作系统(Operating System,OS):是指控制和管理整个计算机系统的硬件和软件资源,并合理地组织调度计算机的工作和资源分配,以提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
用户角度:操作系统是一个控制软件
管理应用程序
为应用程序提供服务
杀死应用程序
程序角度:操作系统是资源管理器
管理外设、分配资源
抽象
将CPU抽象成进程
将磁盘抽象成文件
将内存抽象成地址空间
操作系统层次:位于硬件之上,应用程序之下
功能接口:操作系统为用户和计算机之间的交互提供接口
命令接口:允许用户直接使用
联机命令接口:交互式命令接口,“说一句,做一句”
脱机命令接口:批处理命令接口,“说一堆,做一堆”
程序接口:允许用户通过程序间接使用,也叫系统调用,广义指令;
CUI:图形化用户接口
内部组件:
CPU调度器
物理内存管理
虚拟内存管理
文件系统管理
中断处理与设备驱动
四大特征
并发
一段时间内运行多个进程,宏观上是同时发生的,但微观上仍是交替发生的
并行 : 一个时间点运行多个进程,一般要求有多 ...
计算机网络1.0
概述计算机网络已由一种通信基础设施发展为一种重要的信息服务基础设施。
概述网络、互联网 和 因特网:
网络:网络(Network)由若干结点(Node)和连接这些结点的链路(Link)组成。
互连网(互联网):多个网络通过路由器互连起来,这样就构成了一个覆盖范围更大的网络,即互连网(互联网)。因此,互联网又称为“网络的网络(Network of Networks)”。
因特网:因特网(Internet)是世界上最大的互连网络(用户数以亿计,互连的网络数以百万计)。
internet与Internet的区别
internet(互联网或互连网)是一个通用名词,它泛指多个计算机网络互连而成的网络。在这些网络之间的通信协议可以是任意的。
Internet(因特网)则是一个专用名词,它指当前全球最大的、开放的、由众多网络互连而成的特定计算机网络,它采用TCP/IP协议族作为通信的规则,其前身是美国的ARPANET。
任意把几个计算机网络互连起来(不管采用什么协议),并能够相互通信,这样构成的是一个互连网(internet) ,而不是因特网(Internet)。
因特网发展的三 ...


















