第八章:堆
堆堆的核心概述
每个Java程序代表一个进程,每个进程会创建一个单独的JVM示例,所以每个线程会有一个专门的堆区,而一个进程中的所有线程则共享一个堆区
查看堆空间的工具:JDK安装目录的bin目录下的jvisualvm.exe
软件示例
栈、堆、方法区之间的关系示例
堆的内存细分
JDK7版本堆内存结构
JDK8堆内存结构
设置堆内存大小和OOM
设置和查看堆空间大小设置堆空间大小参数
-Xms 用来设置堆空间(年轻代+老年代)的初始内存大小
-X为jvm运行参数
ms:memory start
-Xmx 用来设置堆空间(年轻代+老年代)的最大内存大小
默认堆空间大小
12345678910111213141516package com.bang.jvm.ch8;public class HeapSizeDemo { public static void main(String[] args) { //返回Java虚拟机堆内存总量 long initialMemory = Runtime.getRun ...
redis6.0基础
Redis本文档参考自 B站尚硅谷Redis课程
NoSQL数据库简介背景web1.0时代,数据访问量有限,用高性能单节点服务器就可以解决大部分问题
web2.0时代,智能移动设备的普及,用户访问量大幅提升,产生大量用户数据,互联网平台面临巨大性能挑战
解决办法解决CPU压力解决应用服务器压力,一个最直观的方法就是采用集群,多个应用服务器分摊访问量
此方案存在的问题:session的问题,对于一个系统而言,用户初次访问,用户的信息会存储在session中,这样用户第二次访问就无需再次重复登陆
但是如果用集群的方式,session存在于服务器1中,但是下次访问用户可能分配到了服务器2,这样无法获取用户对应的session数据
对应的解决办法方法一:存储到cookie中session存储在服务器端、cookie是存储到客户端的,数据存储在cookie中会存在一定的安全性问题
方法二:session复制当前服务器session发生变化,就会复制多份传递给各个其他服务器
缺点:session数据冗余,节点越多浪费越大
方案三:存在文件服务器或者数据库里缺点:读取存储时大量的IO效率问题 ...
Linux安装与网络配置
Linux安装Linux安装基于虚拟机VMWare在windows系统搭建Linux环境
需要的软件
虚拟机VMWare
Centos镜像文件
SSH客户端SecureCRT
文件传输工具WinScp
1234以上软件的百度网盘链接:链接:https://pan.baidu.com/s/1vpmwnmAcQL0rG906wl_NyQ 提取码:oo34 --来自百度网盘超级会员V6的分享
虚拟机Linux安装
打开VMWARE软件
加载对应的CentOS映像文件,并设置对应磁盘和内存大小
配置完一个虚拟机,其他相同环境配置的环境可以借助快照克隆技术实现快速创建若干相同配置的虚拟机
虚拟机网络配置安装后的虚拟机,进入CentOS,网络是不可用的,无法与宿主机和外部进行网络访问
我们需要将虚拟机系统的网络ip地址设置为静态,这样当作服务器连接时不会丢失
网络适配器设置为NAT模式1点击:虚拟机-》设置-》网络适配器
虚拟机Ip地址和网关设置1点击: 编辑-》虚拟网络编辑器
更改子网地址子网地址前16位应该与主机保持一致,比如图中主机子网地址为192.168.86.0,则虚拟 ...
Lambda表达式
Lambda表达式Lambda表达式是一个匿名函数,可以理解为一段可以传递的代码(将代码像数据一样进行传递)
Lambda表达式的使用语法
->:Lambda操作符或者箭头操作符
->左边:Lambda形参列表(接口中抽象方法的形参列表)
->右边:Lambda体(重写抽象方法的方法体)
Lambda表达式本质上是接口的一个实例
Lambda表达式使用六种场景实例场景一:无参、无返回值123456789101112131415public class LambdaTest { public static void main(String[] args) { //创建线程实例 Runnable r1 = new Runnable(){ @Override public void run() { System.out.println("We are Family"); } ...
第五章:虚拟机栈
第五章:虚拟机栈虚拟机栈概述背景
内存中的栈和堆
虚拟机栈基本内容
对于栈存在OOM(栈溢出),不存在GC(垃圾回收)
面试题:开发过程中遇到的异常有哪些?
java.lang.StackOverFlow异常举例:死递归
设置栈内存大小可以使用参数-Xss来设置线程的最大栈空间,栈的大小直接决定了函数调用的最大可达深度
示例IDEA中如何修改JVM的配置
可以通过设置不同的虚拟机栈内存大小,比较死递归中调用的次数
12345678public class StackErroTest { private static int count=0; public static void main(String[] args) { count++; System.out.println(count); main(args); }}
栈的存储单位
栈运行原理
栈帧的内部结构局部变量表局部变量表基础知识
为什么是数字数组:因为char、boolean等非数字类型均可以转换成int ...
十九、电脑商城项目总结
电脑商城项目总结本项目来源于B站视频,项目对于新手非常友好
后端利用SpringBoot+MyBatis+Mysql来实现
前端利用html+css+javascript来实现
前后端并未实现分离,是传统的前后端一体的web项目
B站视频链接
项目资源链接:
12链接:https://pan.baidu.com/s/1M4L1qzjcHCnYvVV00g9VKw 提取码:1wqc
项目总结整个项目学习下来,对于个人最大的帮助总结如下
了解了一个项目各个业务开发的具体流程,充分体会了web项目的MVC思想
一个项目代码开发的流程
业务模块整体功能分析
设计并创建数据库
数据库表对应实体类创建
持久层开发
规划需要执行的SQL语句
接口和抽象方法设计
SQL映射文件配置(Mybatis mapper.xml文件的编写)
单元测试(每编写一个功能函数,都需要在测试类中进行单元测试,确保功能正常)
业务层开发
规划异常(设计对应的异常基类)
接口和抽象方法(方法名不重要,重要的是方法参数列表的设计,需要前端传递何种参数)
抽象方法实现
单元测试
控制层开发
异常处理(创建控 ...
十八、图像上传功能优化功能实现
图像上传功能优化优化之前的图片上传模块控制层代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364/** 设置上传文件的最大值 10MB */public static final int MAX_AVATAR_SIZE = 10*1024*1024;/** 设置允许接收的文件类型 */public static final List<String> AVATAR_TYPE = new ArrayList<>();static { AVATAR_TYPE.add("image/jpeg"); AVATAR_TYPE.add("image/png"); AVATAR_TYPE.add("image/bmp"); AVATAR_TYPE.add("image/gif") ...
十三、购物车列表展示功能实现
购物车列表展示用户登录之后,进入购物车页面,即将当前用户购物车列表展示在该页面对应位置
持久层规划执行的SQL语句购物车列表展示页面数据来源于t_product和t_cart两张数据库表
1234567891011121314 SELECT cid, uid, pid, t_cart.price AS cartPrice, t_cart.num AS cartNum, t_product.title AS productTitle, t_product.image AS productImage, t_product.price AS productPriceFROM t_cart LEFT JOIN t_product ON t_cart.pid=t_product.id WHERE uid=? ORDER BY t_cart.modified_time DESC;
VO: Value Object,值对象,当进行select查询时,查询的结果数据来自于多张表,发现无法使用某个POJO实体类来接收,POJO实体类不能包含多表查询出来的结果,解决方法是:重新构建 ...
十四、更新购物车商品数量功能实现
更新购物车商品数量用户点击商品数量加减按钮,向后端发送请求,更新购物车数据表
持久层规划执行的SQL语句本质是更新语句,更具cid跟新num字段值,在前面功能模块中已经实现
在执行更新操作之前,还需要判断当前购物车记录在数据库表中是否存在,本质是查询语句
1select * from t_cart where cid=?;
接口和抽象方法123456/** * 根据id查询对应的购物车记录 * @param cid 购物车id * @return 购物车数据 */Cart findByCid(Integer cid);
SQL映射文件配置123<select id="findByCid" resultMap="cartPojoMap"> select * from t_cart where cid=#{cid};</select>
单元测试12345@Testpublic void findByCid(){ Cart cart = cartMapp ...
十五、显示勾选的购物车数据功能实现
显示勾选的购物车数据用户在购物车页面勾选指定商品,然后点击结算按钮,跳转到订单结算页面,展示用户勾选的数据。订单结算页面数据的展示内容还是来自于购物车数据表
持久层规划需要执行的SQL语句两个页面跳转,传递用户勾选商品的cid列表,然后根据cid查询对应的数据,本质是一条查询语句
1234567891011121314SELECT cid, uid, pid, t_cart.price AS cartPrice, t_cart.num AS cartNum, t_product.title AS productTitle, t_product.image AS productImage, t_product.price AS productPriceFROM t_cart LEFT JOIN t_product ON t_cart.pid=t_product.idWHERE cid in ?ORDER BY t_cart.modified_ti ...