模型、专注、简单、概述、抽象、思想、`模型、出现、存在`
正向引导、领域
`概念` 流、管道、通道、池、缓存区、阻塞、迭代器、序列化、装饰、指针、引用、容器、代理、事务、消息队列、安全失败、快速失败、
`I/O` IO、NIO、reader、writer、input、output、stream、buffer、
`语言` java jvm vue python go swift c
`协议` RPC、Dubbo、http、https、TCP、UDP、Socks5、Shadowsocks
`工具` jmeter、jenkins、redis、adb、monkey、appium、selenium、
`算法`
`数据结构`
`设计模式`
`框架` mybatis、Netty、
`其他` RabbitMQ、Flink、Kafka、impush、zookeeper、
`请求` axios | fetch | requests | HttpClient
'java语言'
字符串、数组、List、Map、Set 、核心接口、核心函数式接口
| 类 | 接口 | 枚举 | 注解 | 泛型 | 反射 | IO | NIO |
(x < y) ? -1 : ((x == y) ? 0 : 1)
请求响应 request-response
文件模型 open -> read/write -> close
客户端/服务端模型 client-server
生产者/消费者模型 producter-comsumer
发布者/订阅者模型 Publisher-subscriber
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态
HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,
更不能代表HTTP使用的是UDP协议(面对无连接)
程序为指针变量分配内存区域,而引用不需要分配内存区域
变量是一种使用方便的占位符,用于引用计算机内存地址
什么是分布式? 1.任务分解 2.节点通信
集群:同一个业务, 部署在多个服务器上
分布式:一个业务拆分成多个子系统, 部署在不同的服务器上
第一版 数据库和应用由同一台服务器驱动
第二版 单击负载越来越高, 数据库服务器和应用服务器分离
第三版 应用服务器做集群, 配置多台应用服务器单台数据库服务器
第四版 数据库高性能操作, 1.数据库读写分离怎么操作 2.数据库的数据同步 3.数据库路由 mycat
第五版 访问量持续增高的, 引入缓存机制
第六版本 数据库的水平/垂直拆分
值类型: 赋值是进行值拷贝操作
方法是纯粹的数据逻辑
如何理解多维数组、将数组抽象成盒子、多重盒子嵌套
注解和XML两种不同的配置模式
注解的本质就是一个继承了 Annotation 接口的接口
可扩展/可重用的配置:用于将关注点从环境构建目标运行时中分离。然后使用专门的工具将它们合并。
组件是对数据和方法的简单封装
java对象是类实例或数组. 数组就是一个对象、是动态创建的.
BootLoader、内存管理、进程管理、中断和系统调用、文件系统
RMI 远程方法调用、RPC远程过程调用
反射机制: 就是动态获取对象信息和调用对象方法
学习能力、模型化、理论体系、管理能力、
涉及功能、涉及流程、涉及模块、涉及平台、涉及页面、影响产品、影响范围
测试的职责:质量保障、而不是质量保证
响应式 `1.基于数据流 2.变化传递`
分布式 `一个业务分拆多个子业务,部署在不同的服务器上`
响应式 `一个属性的变化会导致使用它的其他属性直接或间接的发生相应变化`
vuex 状态管理核心:state、getter、mutation、action、module
FAutoTest、SoloPI、json scheme、newman、GoReplay
http://myjson.com/ 可以用于调试各种json数据
python -m http.server #搭一个简易的本地局域网
"GET/POST的区别?"
从HTTP协议本身的角度GET/POST没有区别、只是语义不同
从浏览器实现、REST表征状态转移角度、具有很多区别...
GET是安全的/也是幂等的,而POST既不是安全的/也不是幂等的
一切皆数据、数据是一段内存地址、变量引用数据信息、指针引用地址信息
`函数名本质是函数指针、指向函数的内存地址、函数名就是函数的内存地址`
`数组名本质是数组指针、指向函数的内存地址、数组名就是数组的内存地址`
数据是什么?`数据就是一段内存地址`
指针是什么?`指针是一种特殊的数据类型、只能引用内存地址`
类型是什么?`数据类型用于分类数据、确定元素存储空间`
变量是什么?`变量不是特定类型数据的组成部分、用来引用数据`
指针变量是?`指针变量本质上就是存储特定数据的内存地址`、
普通指针变量引用其他数据的内存地址、
函数指针变量用于引用函数的内存地址、
数组指针变量用于引用数组的内存地址、函数的形参为数组时本质上就是一个数组指针。
函数也是数据、存储在内存中、具有物理内存地址、函数名就是一个指针变量、它指向函数的代码。
"函数指针" 是指向函数的指针变量、`本质是一个指针变量`、函数指针声明:`int(*p)();` //注意括号 (*p)必须有
"指针函数" 指带指针的函数、本质还是一个函数、只不过返回类型是某一类型的指针. `int *p ();`
当一个函数声明的返回值类型为一个指针类型时、实际上就是返回一个地址给调用函数、以用于需要指针或地址的表达式中。
"全局变量":保存在内存的全局存储区中、占用静态的存储单元;全局变量在声明后整个程序中都是可用的。
"局部变量":保存在栈中、只有在所在函数被调用时才动态地为变量分配存储单元。局部变量在函数外部是不可知
元组是异构数据结构,而列表是同构序列
为什么局部变量必须指定初始值?
从汇编语言来分析、我们发现程序在使用完栈内存后并不进行任何初始化为0的操作、只会将最初分配给函数的内存起始地址再次分配给寄存器、程序用过的栈内存空间、没有初始化、所以内存中存在无意义的数据、如果函数中的局部变量没有赋值、直接使用、就会导致数据异常、
esp定律指的也是堆栈平衡原理,esp是x86用于保存栈顶指针的寄存器
要想把数据放入内存,必须先要分配内存空间
在函数内部定义的变量、数组、结构体、共用体等都称为局部数据。
在很多编译器下,局部数据的初始值都是随机的、无意义的,而不是我们通常认为的“零”值。
JVM相关、内存模型
Run-Time Data Areas:jvm运行时数据区、6个数据区
程序启动时创建、程序退出时才销毁的数据区域。[堆、方法区、运行时常量池]
线程创建时创建、线程退出时就销毁的数据区域。[程序计数寄存器、jvm栈、本机方法栈]
ClassLoader、Runtime Data Area、Execution Engine、Native Interface
工作内存、主内存 8种操作:lock unlock read load use assign store write
数据结构用于解决数据的逻辑关系和存储问题,而算法用于处理和分析数据
堆是存储的单位、解决数据是如何存储的问题
栈是运行时单位、解决程序该如何执行的问题
"HTTP请求": 请求行、请求头、空行、请求主体
请求行: 请求方法 URI 协议/版本
"HTTP响应": 状态行、响应头、响应实体
响应行: 协议/版本 状态码 状态说明
当我们新建一个对象时,Java会在Heap中申请一块内存区域用以存放类的数据。而成员变量就是类的数据,也是放在这块内存区域中的。只需要JVM在申请内存的时候顺便把整块区域都置为零即可完成初始化,方便快捷。
而对于方法的局部变量,是在线程的Stack中,当然Stack他也可以帮我们初始化,不过有一个问题。对于有些局部变量,在方法的一开始是没有的,有些在循环中的局部变量是要反复的声明多次的。有些局部变量作用域结束后,另一个局部变量又会占用这个局部变量的位置。
局部变量运行时被分配在栈中,量大,生命周期短,如果虚拟机给每个局部变量都初始化一下,是一笔很大的开销,但变量不初始化为默认值就使用是不安全的。出于速度和安全性两个方面的综合考虑,解决方案就是虚拟机不初始化,但要求编写者一定要在使用前给变量赋值
网友评论