校招之后的自己
文章平均质量分 69
宫城诗
这个作者很懒,什么都没留下…
展开
-
20210716——Java并发编程的艺术 第三章 Java内存模型
并发编程模型的两个关键问题在并发编程中,需要处理两个关键问题:线程之间如何通信以及线程之间如何同步。在命令式编程中,线程之间的通信机制有两种:消息传递和共享内存同步是指程序中用于控制不同线程间操作发生相对顺序的机制,在共享内存并发模型里,同步是显示进行的。程序员必须显示指定某个方法或某段代码需要在线程之间互斥执行。在消息传递的并发模型中,由于消息的发送必须在消 ,息的接受之前,因此同步是隐式进行的。Java内存模型的抽象结构在java中,所有实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间原创 2021-07-16 19:23:51 · 136 阅读 · 0 评论 -
20210714——Java并发编程的艺术 第二章 Java并发机制的底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM中,JVM执行字节码,最终需要化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令volatile的使用原创 2021-07-16 13:56:34 · 134 阅读 · 0 评论 -
20210714——Java并发编程的艺术 第一章 并发编程的挑战
上下文切换单核处理器也支持多线程执行代码,cpu通过给每个线程分配CPU时间片来实现这个机制,时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU需要不停的切换线程执行,让我们感觉多个线程是同时进行的,时间片一般是几十毫秒。cpu通过时间片分配算法来循环执行任务,当任务执行一个时间片后会切换到下一个任务,但是切换前会保存上一个任务的状态,以便下次切换回这个任务,可以加载这个任务的状态,所以任务从保存再到加载的过程是一次上下文切换。多线程一定快么从数据可以看到,当并发执行累加操作不超过百万原创 2021-07-14 21:06:01 · 97 阅读 · 0 评论 -
20210708——Redis缓存穿透和雪崩(十一)
缓存穿透概念用户查询一个数据,redis没有,就是缓存无命中,于是向持久层数据库请求查询,发现也没有,查询失败。当很多用户一起查询的时候,持久层数据库压力很大,可能导致崩溃,就是缓存穿透。解决方案:布隆过滤器对所有可能查询的数据以hash形式存储,先进行校验,不符合直接丢弃。解决方案:缓存空对象当存储层不命中之后,缓存一个空对象,设置一个过期时间,之后在访问这个数据从缓存中获取,保护了后端数据源但是空对象缓存,占用了资源对于保持一致性的业务可能会有影响缓存击穿击穿是指一个key非常热点,原创 2021-07-08 17:36:21 · 119 阅读 · 0 评论 -
20210708——Redis主从复制(十)
概念主从复制,是指一台Redis服务器的数据,复制到其他Redis的服务器,前者称为主服务器节点,后者称为从节点。数据的复制是单向的,只能从主节点到从节点,Master以写为主,Slave以读为主。作用1)数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式2)故障恢复:当主节点出现问题,可以由从节点提供服务,实现快速的故障恢复3)负载均衡:实现读写分离,主节点负责写,从节点负责读,分担服务器负载4)高可用:主从复制还是哨兵和集群能够实施的基础环境只配置从库,不用配置主库i原创 2021-07-08 17:20:26 · 115 阅读 · 0 评论 -
20210707——Redis发布与订阅(九)
Redis发布订阅是一种消息通信模式 发送者发送消息,订阅者接受消息Redis客户端可以订阅任意数量的频道。订阅命令实践发布者接受者原理实现Redis是通过C语言实现的,通过分析Redis的源码里的pubsub.c文件,了解发布和订阅机制的底层实现,加深对redis的理解。Redis是通过publish,subsribe, psubsribe等命令实现发布和订阅功能通过Subscribe命令订阅某个频道之后,redis-server里面维护了一个字典,字典的键就是一个个chann原创 2021-07-08 00:14:11 · 169 阅读 · 0 评论 -
20210707——Redis持久化(八)
Redis 是内存数据库,如果不将内存中的数据落入磁盘,那么服务器一旦异常崩溃,数据库中的状态也会消失。RDB redis database在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是Snapshot快照,他恢复时将快照文件直接读到内存中。Redis会创建(fork)一个子进程来进行持久化,会将数据临时写入一个文件,待持久化过程结束了,在用这个临时文件替换上次持久好的文件,整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能,如果需要大规模的数据恢复,且对于数据恢复的完整性不是非原创 2021-07-07 20:22:21 · 119 阅读 · 0 评论 -
20210706——Redis.conf详解(七)
启动的时候,我们就是通过配置文件启动redis单位配置文件,unit单位对大小写不敏感包含类似于Spring一样,可以导入其他的配置文件网络常用的绑定ip端口号开启保护模式通用默认是no,改成yest,改成了后台运行模式如果以后台方式运行,我们就需要指定一个pid文件日志 debug用于测试和开发notice 通知,部分重要日志,生产环境warning日志的文件位置默认数据库数量是否显示logo快照持久化,在规定的时间内执行了多少次会持久化到文件中原创 2021-07-07 01:41:46 · 145 阅读 · 0 评论 -
20210705——Redis之Jedis与SpringBoot整合(六)
Jedis是redis官方推荐java连接工具,使用java操作中间件导入对应的依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.原创 2021-07-06 14:42:19 · 142 阅读 · 0 评论 -
20210705——Redis事务(五)
redis单条命令不保证原子性redis的事务本事:一组命令的集合redis的事务没有隔离级别的概念,所有的命令在事务中,并没有直接执行,只有发起执行命令的时候才会执行事务的执行redis的事务:开启事务(multi),事务入队,执行事务(exec)锁:redis还可以实现乐观锁放弃事务编译异常,事务所有的命令都不会执行运行时异常,如果事务队列出现语法错误,那么执行命令,其他命令可以执行监控悲观锁不管做什么都会加锁,影响性能乐观锁很乐观,认为什么时候都不会出现问题,所以不会原创 2021-07-05 16:52:01 · 115 阅读 · 0 评论 -
20210703——Redis三种特殊数据类型(四)
Geospatial地理位置朋友的定位,附近的人,打车距离计算两地之间的距离,方圆几里的人命令geoadd规则:两级无法直接添加,我们一般会下载城市数据,通过java程序导入参数key(经度,维度,城市)127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing(integer) 1127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai(integer) 1127.0原创 2021-07-04 15:50:04 · 151 阅读 · 0 评论 -
20210630——Redis基本数据类型(三)
全段翻译:Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU e.原创 2021-07-02 23:35:58 · 588 阅读 · 1 评论 -
20210626——Redis入门(二)
redis是什么Remote Dictionary Server远程字典服务C语言编写的免费和开源,当下最热门的nosql的技术之一,也被人们称为结构化数据库redis能做什么内存存储内存中断电即失去持久化rdb,aof效率高,高速缓存发布订阅地图信息分析计时器、计数器(浏览量)redis 特性多样的数据类型持久化集群事务redis安装window双击server启动了使用客户端连接redis双击client测试连接ping记住window使用red原创 2021-06-30 23:37:04 · 183 阅读 · 1 评论 -
20210622——Redis概述(一)
Nosql概述为什么要用nosql已经是2021年,大数据时代,一般的数据库无法处理了第一个时代原始的时代,单机Mysql,一般基本的网站访问量不会太大,还是静态的html,这个时候网络的瓶颈在于1)数据量太大,一个机器放不下去2)数据的索引(B+树),一个机器内存也放不下去3)访问量,数据库访问量比较大, 读写不分离,服务器承受不了只要你出现以上三种情况之一,你就必须要晋级。第二个时代Memcached缓存+mysql+垂直拆分+读写分离网站80%的情况都是读,查询数据库的方式十分麻原创 2021-06-23 00:55:45 · 165 阅读 · 1 评论 -
20210620——记一次突发奇想的前后端
前言莫名其妙想实现一个前后端分离的登录功能,就是最简单的,前端把表单信息返给后端,后端接收封装成 实体类,然后去数据库验证,最后实现登录。时间匆忙,需求很简略前端直接在webstorm建的一个项目以前还需要用git,vue init用vue-cli脚手架搭建来的,现在直接创建就可以了踩坑1初始化之后好像需要npm install 踩坑2应该是这种创建方式,没有npm run dev这样的指令,需要npm run serve用来启动踩坑3我用了element-ui和axios,别忘了原创 2021-06-20 01:03:23 · 112 阅读 · 0 评论 -
202010516——Java编程思想
前言写在前面,今天是二一年的五月十六日。明天盲审的论文成绩就出了,心里还是有些忐忑,但愿有惊无险吧。Java编程思想这本书在很久以前本科的时候简单的翻过一遍,希望今后查缺补漏。...原创 2021-05-26 13:59:41 · 162 阅读 · 2 评论 -
20210420——SpringBoot微服务整合mybatis(五)
Mybatis自研 <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-bo原创 2021-04-20 22:34:23 · 116 阅读 · 0 评论 -
20210418——SpringBoot微服务Druid数据源(四)
Data对于数据库访问层,无论是关系型数据库还是非关系型数据库,SpringBoot底层都采用Spring Data的方式统一进行处理配置文件application.ymlspring: datasource: username: root password: password url: jdbc:mysql://localhost:3306/mybatismmz?useUnicode=true&characterEncoding=utf-8&serverT原创 2021-04-19 22:56:58 · 206 阅读 · 0 评论 -
20210415——SpringBoot微服务深入学习(二)
yaml语法SpringBoot的配置文件,要么叫application.properties,要么叫applicaiton.yml两种语法不一样properties的写法 server.port=9091yml的写法,中间一定有空格server: port: 9091赋值声明两个pojo类Dog类package com.mmz.pojo;import org.springframework.stereotype.Component;/** * @Classname Dog原创 2021-04-15 22:33:19 · 132 阅读 · 0 评论 -
20210414——SpringBoot微服务初探(一)
微服务阶段javaee:oopmysql:持久化前端:视图javaweb:独立开发三层网站smm:框架简化了我们的开发流程,配置较为复杂之前都是打war包,在tomcat中运行spring简化:springboot,微服务架构 可以打jar包,内嵌tomcat服务越来越多,springcloud微服务简介什么是微服务就是一种架构风格,开发一个应用的过程中,这个应用必须构建一系列小服务的组合,可以通过http方式进行交互,要说微服务框架,先得说说之前的单应用框架单应用框架所谓单应用原创 2021-04-14 22:47:22 · 155 阅读 · 1 评论 -
20210324——SSM框架整合
创建数据库创建数据库create DATABASE ssmbuild;切换到当前数据库下面use ssmbuild查看原来有没有book这张表drop TABLE if EXISTS books;`在这里插入代码片`创建数据库表CREATE TABLE book(bookID INT(10) NOT NULL AUTO_INCREMENT COMMENT '书id',bookName VARCHAR(100) NOT NULL COMMENT '书名',bookCounts IN原创 2021-04-13 20:51:12 · 149 阅读 · 1 评论 -
20210228——SpringMVC
前言ssm springmvc+spring+mybaits MVC三层架构javaSE:认真学习,快速入门javaWeb:认真学习框架:研究官方文档,锻炼自学/笔记/项目能力MVCmvc是模型model,视图view,控制器controller的简写,是一种软件设计思想。是将业务逻辑、数据、显示分离的方法来组织代码model1时代model2时代model2这样不仅提高了代码的复用率与项目的拓展性,且大大降低了项目的维护成本,Model1的实现方式比较简单,适用于开发小规模项目,M原创 2021-03-04 01:51:11 · 114 阅读 · 2 评论 -
20200208——Spring(下)
Bean的自动装配自动装配是Spring满足bean依赖的一种方式Spring会自动从上下文中寻找,并且自动装配属性在Spring有三种装配的方式1)在xml显示配置2) 在java中显示配置3) 隐式的自动装配beanByName自动装配<!-- <bean id="person" class="com.mmz.pojo.Person">--><!-- <property name="name" value="mmz">&l原创 2021-02-28 15:34:38 · 105 阅读 · 0 评论 -
20210205——Spring(上)
简介Spring 春天,给软件行业带来了春天2002,首次推出了框架interface21(spring前身)2004,推出了spring框架spring理念,使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的框架原创 2021-02-07 02:39:38 · 171 阅读 · 0 评论 -
20210105——mybatis(下)
Lombok偷懒神器安装在settings里面Plugins搜索lombok在项目中导入lombok的jar包<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId>原创 2021-02-03 21:48:13 · 113 阅读 · 0 评论 -
20201224——Mybatis(上)
简介mybatis是一个持久层框架,支持定制化的sql,存储过程以及高级映射,避免了所有jdbc代码和手动参数集以及获取结果集,mybatis可以使用简单的xml或者注解来配置和映射原生类型,接口和java中的pojo持久层数据持久化,就是将程序的数据在持久状态和瞬时状态转化的过程。内存:数据断电就丢失了数据库(jdbc),io文件持久化第一个mybatis程序环境搭建在navicat中创建数据库CREATE DATABASE `mybatismmz`;创建表CREATE TABLE原创 2021-01-05 21:57:06 · 224 阅读 · 1 评论 -
20201217——Filter/Listener
Filter的应用场景在我们接受请求的时候,可能有一些请求不应该是Servlet去做的,比如中文乱码的问题,登录验证等等,应该在servlet外面有一层去过滤这段数据,这一层就是FilterFilter开发步骤1.导包2.编写过滤器 javax.servlet.*package com.mmz.filter;import javax.servlet.*;import java.io.IOException;/** * @Classname CharacterEncodingFilte原创 2020-12-17 19:30:04 · 126 阅读 · 0 评论 -
20201216——Cookie/Session
会话会话:用户打开了一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程称之为会话有状态会话:你能证明你是你自己/一个网站怎么证明你来过那么服务器怎么知道你这个客户端上次来过?1.服务器给客户端一个信件,客户端下次访问服务器带上信件就可以了:cookie2.服务器登记你来过了,下次你再来的时候匹配你 session保存会话的两种技术cookie客户端技术(通过http请求)session服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息放在session中原创 2020-12-17 14:16:58 · 100 阅读 · 0 评论 -
20201216——servlet的原理
Servlet原理servlet是由web服务器调用,web服务器在收到浏览器请求之后Mapping问题一个servlet可以指定一个/多个/通用请求路径前缀和后缀都可以但是*前面不能加项目映射的路径优先级问题指定了mapper(固有的)映射路径,优先级最高。如果找不到就会找默认的处理请求,ServletContextweb容器在启动的时候,它会为每一个web程序都创建一个对象的ServletContext对象,它代表了当前的web应用共享数据:在这个servlet的数据,可以在另外原创 2020-12-16 21:22:58 · 114 阅读 · 0 评论 -
20201215——构建一个原始的maven的javaweb项目
创建一个空的maven项目构建一个普通的maven项目,删除里面的src目录,以后的学习就在这个项目里面创建moudel,这个空的工程就是maven的主工程。我们尽量把所有的依赖都导入这个主工程里面,避免重复导入导入依赖maven仓库的网址在上面搜索你想要的依赖包然后添加到我们的dependencies的标签下面即可...原创 2020-12-16 15:10:58 · 164 阅读 · 2 评论 -
20201214——javaweb
基本概念web开发 web网页的意思在java中,动态web资源开发的技术称为javaweb静态webhtml,css提供给所有人看的数据不会变化动态web提供给所有人数据始终会发生变化,在不同的时间和不同的地点javaweb应用程序web应用程序,可以提供浏览器访问的程序能访问的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上web应用程序编写好之后,若想提供给外界访问,需要一个服务器来进行统一管理web服务器asp微软:最早流行的就是asp在html中嵌入vb的原创 2020-12-15 12:48:37 · 132 阅读 · 1 评论 -
20201210——JVM探究
JVM的位置运行在操作系统上的JVM体系结构本地方法栈,虚拟机方法栈,程序计数器,方法区,堆类加载器前一篇说过,把class文件加载到jvm中双亲委派机制类加载器收到类加载的请求将这个请求向上委托给父类加载器去完成,一直向上委托,直到启动类加载器启动加载器检查是否能够加载这个类,能加载就结束,使用当前的加载器,否则,通知子加载器进行加载沙箱安全机制java安全机制的核心就是java沙箱,沙箱是一个限制程序运行的环境,沙箱机制将java代码限定在虚拟机特定的运行范围,并且严格限制系统原创 2020-12-14 13:02:11 · 91 阅读 · 0 评论 -
20201209——java内存分析
概况java内存分为程序计数器,堆,本地方法栈,虚拟机方法栈,方法区堆存放所有new的对象和数组可以被所有的线程共享,不会存放别的对象引用栈存放基本变量类型(会包含这个基本类型的具体数值)引用对象的变量(会存放这个引用在堆里面的具体地址)方法区可以被所有的线程共享包含了所有的class和static变量了解类的加载过程当程序主要使用某个类的时候,如果该类还未被加载到内存中,则系统会通过如下三个步骤来对类进行初始化类的加载load将类的class文件读入内存,并为之创建一个java原创 2020-12-10 02:32:17 · 266 阅读 · 0 评论 -
20201209——java反射
静态与动态动态语言 java c c++静态语言 python javascript就看是否能在运行的时候,是否可以改变其结构Reflection反射,是java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并且能直接操作任意对象的内部属性及方法。加载完一个类之后,在堆内存的方法区就产生了一个Class类型的对象(一个类只能有一个Class对象),这个对象完整的包含了完整的类的结构信息,我们可以通过这个对象看到类的结构,这个对象就像一面镜子原创 2020-12-09 14:32:24 · 130 阅读 · 0 评论 -
20201209——java注解
什么是注解Annotation是jdk5.0开始引入的新技术Annotation的作用:要记住他并不是程序本身,但是可以对程序进行解释,并且可以被其他程序读取Annotation的格式:注解是以"@注释名"在代码中存在的,还可以添加一些参数值Annotation在哪里使用?可以附加在package,class,method,field上面,相当于给他们额外的辅助信息。我们可以通过反射机制编程实现对这些元数据的访问。/** * @Classname TestAnnotation1 * @Desc原创 2020-12-09 10:20:39 · 120 阅读 · 0 评论 -
20201208——java多线程之线程协作
生产者和消费者就是有一个中间的仓库,生产者生产商品放入仓库,消费者从仓库取走产品进行消费没有产品的话,消费者暂停,生产者不断的生产仓库的商品满了的花,生产者暂停,消费者不断的消费java提供的解决线程之间通信的方法wait() 表示线程一直等待,直到其他线程通知,与sleep不同,会释放锁的资源notify()唤醒一个处于等待的线程notifyAll() 唤醒同一个对象上所有调用wait()方法的线程,优先级别高的线程优先进行调度管程法解决问题package consumerandprod原创 2020-12-09 09:30:16 · 82 阅读 · 0 评论 -
20201208——java多线程之线程同步
线程同步并发,同一个对象被多线程同时操作现实生活中,我们会遇到同一个资源,很多人都想使用的问题,比如:食堂排队打饭,每个人都想吃饭,最天然的方法就是排队,一个人一个人来处理多线程的问题时,多个线程访问同一个对象,并且某些线程还想修改这个对象,这个时候就需要线程同步,线程同步就是一种等待机制,多个需要访问此对象的线程进入对象的等待池,形成队列,等待前面线程使用完毕,下一个线程再使用由于同一进程的多个线程共享同一块存储空间,在带来方便的同时,也带来了访问的冲突问题,为了保证数据在方法中被访问的正确性,在原创 2020-12-08 17:13:56 · 150 阅读 · 0 评论 -
20201208——java之多线程 线程停止(stop)/休眠(sleep)/优先级(priority)/礼让(yield)/插队(join)/状态(state) 守护线程
停止线程不推荐使用jdk提供的stop,destroy方法推荐线程自己停下来建议使用一个标志位进行终止变量,当flag=false,则终止线程package state;/** * @Classname TestStop * @Description TODO * @Date 2020/12/8 9:34 * @Created by mmz */// 建议线程正常停止——>利用次数,不建议死循环// 建议使用标志位,设置一个标志位// 不要使用stop,destroy等过时原创 2020-12-08 11:10:01 · 246 阅读 · 0 评论 -
20201203——java之多线程 线程创建
线程创建的方式继承Thread类/** * @Classname TestNewThread1 * @Description TODO * @Date 2020/12/3 17:06 * @Created by mmz */ // 创建线程方式一:继承Thread类,重写run方法,调用start开启线程 // 线程开启不一定立即执行public class TestNewThread1 extends Thread{ @Override public voi原创 2020-12-08 09:59:01 · 97 阅读 · 0 评论 -
20201207——静态代理模式
关于静态代理模式真实对象和代理对象都要实现同一个接口代理对象需要一个真实对象的一个对象,在代理对象的实现的方法中,需要真实对象的方法代理对象可以做很多真实对象做不了的事情,而真实对象可以专注于做自己的事情。/** * @Classname StaticProxy * @Description TODO * @Date 2020/12/7 18:30 * @Created by mmz */public class StaticProxy { public static void原创 2020-12-07 18:44:02 · 140 阅读 · 0 评论