Java
文章平均质量分 78
Java相关内容介绍
浅羽技术
才疏学浅,习习而为,编程羽录,与你同行。
展开
-
【五一创作】商城项目中购物车是如何实现的
如果商品不存在,那么调用服务,根据传来的商品id查询商品数量,设置商品的数量为页面传来的数量,取商品的第一张图片(购物车列表只展示一张图片)原创 2023-05-01 02:07:18 · 808 阅读 · 0 评论 -
【1024程序员节】MySQL数据库的引擎、优化及去重原理
尽管事务是维护数据库完整性的一个非常好的方法,但却因为它的独占性,有时会影响数据库的性能,尤其是在很大的应用系统中。索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行,尤其是在查询语句当中包含有MAX(),MIN()和ORDERBY这些命令的时候,性能提高更为明显。事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,这样可以保证用户的操作不被其它的用户所干扰。MySQL从4.1开始支持SQL的子查询。原创 2022-10-24 15:25:31 · 1176 阅读 · 25 评论 -
【1024程序员节】Spring中用到的设计模式
其特点是,spring 在使用 getBean() 调用获得该 bean 时,会自动调用该 bean 的 getObject() 方法,所以返回的不是 factory 这个 bean,而是这个 bean.getOjbect()方法的返回值。可以这么认为,实现了 Iterable 接口,则表示某个对象是可被迭代的。Spring 中的 org.springframework.jdbc.core.JdbcTemplate 就是非常经典的模板模式的应用,里面的 execute 方法,把整个算法步骤都定义好了。原创 2022-10-24 15:24:20 · 583 阅读 · 2 评论 -
Autowired和Resource的区别
Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。原创 2022-10-23 23:09:45 · 2114 阅读 · 0 评论 -
多线程的作用
随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。这是另外一个没有这么明显的优点了。原创 2022-10-23 17:43:34 · 721 阅读 · 0 评论 -
Zookeeper必知必会知识点(二)
在恢复模式下,如果是刚从崩溃状态恢复的或者刚启动的 server 还会从磁盘快照中恢复数据和会话信息,zk 会记录事务日志并定期进行快照,方便在恢复时进行状态恢复。议以后,解决 epoch 和 zxid 的冲突,并接受对方的提议,然后向对方发送接受提议完成的消息,重复这个流程,最后一定能选举出 Leader。+ 1 的 Server 票数,设置当前推荐的 leader 为获胜的 Server,将根据获胜的 Server 相关信息设置自己的状。leader,让所有的 Server 都恢复到一个正确的状态。原创 2022-10-22 01:30:14 · 429 阅读 · 0 评论 -
【1024程序员节】ZooKeeper 必知必会的知识点(一)
注的节点删除,则客户端的 Watcher 会收到相应通知,此时再次判断自己创建的节点是否是 locker 子节点中。端获取到所有的子节点 path 之后,如果发现自己创建的节点在所有创建的子节点序号最小,那么就认为该客户。与文件系统不同的是,这些节点。在获取分布式锁的时候在 locker 节点下创建临时顺序节点,释放锁的时候删除该临时节点。个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。器挂掉,该机器与 zookeeper 的连接断开,其所创建的临时目录节点被删除,原创 2022-10-22 01:26:37 · 1010 阅读 · 0 评论 -
【国庆活动】Tomcat 的优化方式
内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用 -Xmx -Xms -XX:MaxPermSize 等参数对内存不同功能块进行划分。这里以 tomcat7 的参数配置为例,需要修改 conf/server.xml 文件,主要是优化连接配置,关闭客户端 dns 查询。这里我们采用了 Nginx 作为缓存服务器,将图片、css、js 文件都进行了缓存,有效的减少了后端 tomcat 的访问。单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建 tomcat 集群是有效提升性能的手段。原创 2022-10-07 00:20:48 · 1130 阅读 · 36 评论 -
【国庆活动】SpringMVC必备面试知识点
系统启动的时候根据配置文件创建 spring 的容器, 首先是发送 http 请求到核心控制器 disPatherServlet,spring 容器通过映射器去寻找业务控制器,使用适配器找到相应的业务类,在进业务类时进行数据封装,在封装前可能会涉及到类型转换,执行完业务类后使用ModelAndView 进行视图转发,数据放在 model 中,用 map 传递数据进行页面显示。是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段。原创 2022-10-06 00:09:58 · 438 阅读 · 9 评论 -
【国庆活动】Spring框架主要模块IOC详解
ApplicationContex 接口对 BeanFactory(是一个子接口)进行了扩展,在 BeanFactory 的基础上添加了其他功能,比如与 Spring 的 AOP 更容易集成,也提供了处理 message resource的机制(用于国际化)、事件传播以及应用层的特别配置,比如针对 Web 应用的WebApplicationContext。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配 器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。原创 2022-10-05 01:07:33 · 750 阅读 · 10 评论 -
【国庆活动】关于Spring Beans 的理解
一 个 Spring Bean 的 定 义 包 含 容 器 必 知 的 所 有 配 置 元 数据 , 包 括 如 何 创 建 一 个 bean, 它 的 生 命 周 期 详 情 及 它 的依 赖。当 定 义 一 个 在 Spring 里 , 我 们 还 能 给 这 个bean 声 明 一 个 作 用 域。有 两 个 重 要 的 bean 生 命 周 期 方 法 , 第 一 个 是 setup ,它 是 在 容 器 加 载 bean 的 时 候 被 调 用。原创 2022-10-04 04:25:44 · 983 阅读 · 12 评论 -
【国庆活动】掌握这些 Java 常用设计模式,金九银十秋招offer机会都在你手里
因此当你使用抽象类来表示行为时,你的类就不能同时是 Runnable 和 Clonable(注:这里的意思是指如果把 Runnable 等实现为抽象类的情况),如果你看到一个类的不同实现有着不同的方式来做同一件事,那么就应该用重写(overriding),而重载(overloading)是用不同的输入做同一件事。尽管你不能想到具体的设计,但如果你可以指出非功能性需求,提出一些问题,想到关于边界条件,这些都会是很好的。因为在 Java 中你不能继承两个类,但当你使接口时,你的类就可以同时拥有多个不同的行为。原创 2022-10-03 00:27:04 · 247 阅读 · 2 评论 -
「笔耕不辍」常见远程调用协议
序列化:Hessian 二进制序列化适用范围:传入传出参数数据包较大,提供者比消费者个数多,提供者压力较。Hessian 协议用于集成 Hessian 的服务,Hessian 底层采用 Http 通讯,采用。RMI 协议采用 JDK 标准的 java.rmi.*实现,采用阻塞式短连接和 JDK 标准序列。协议是对 thrift 原生协议的扩展,在原生协议的基础上添加了一些额外的头信。适用范围:传入传出参数数据包大小混合,消费者与提供者个数差不多,可传。化方式,Java 标准的远程调用协议。原创 2022-09-19 00:17:57 · 568 阅读 · 24 评论 -
「创作之秋」关于线程池,你需要了解这些
2、 在线程池中,同一个线程可以从阻塞队列中不断获取新任务来执行,其核心原理在于线程池对Thread 进行了封装,并不是每次执行任务都会调用 Thread.start() 来创建新线程,而是让每个线程去执行一个“循环任务”,在这个“循环任务”中不停检查是否有任务需要被执行,如果有则直接执行,也就是调用任务中的 run 方法,将 run 方法当成一个普通的方法执行,通过这种方式只使用固定的线程就将所有任务的 run 方法串联起来。任务来了,直接有线程可用可执行,而不是先创建线程,再执行。1、 降低资源消耗;原创 2022-09-18 00:19:39 · 305 阅读 · 10 评论 -
【学习笔记】线程的生命周期和状态
运行的线程执行wait方法,该线程会释放占用的所有资源,JVM会把该线程放入“等待池”中。所有需要竞争同步锁的线程都会放在锁池当中,比如当前对象的锁已经被其中一个线程得到,则其他线程需要在这个锁池进行等待,当前面的线程释放同步锁后锁池中的线程去竞争同步锁,当某个线程得到后会进入就绪队列进行等待cpu资源分配。join()执行后线程进入阻塞状态,例如在线程B中调用线程A的join(),那线程B会进入到阻塞队列,直到线程A结束或中断线程。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。原创 2022-09-17 02:32:30 · 376 阅读 · 4 评论 -
【学习笔记】事务传播行为与隔离级别介绍
如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)容器不为这个方法开启事务不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务必须在一个已有的事务中执行,否则抛出异常必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.事物超时设置:@Transactional(timeout=30) //默认是30秒。原创 2022-09-16 00:44:40 · 183 阅读 · 4 评论 -
Spring 使用注解方式进行事务管理
大家在使用spring的注解式事务管理时,对事务的传播行为和隔离级别可能有点不知所措,下边就详细的介绍下以备方便查阅。步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持。事物注解方式: @Transactional。步骤一、在spring配置文件中引入。原创 2022-09-15 01:23:09 · 314 阅读 · 4 评论 -
工作中常用到的Linux命令操作
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。grep -o ‘objStr1|objStr2’ filename|wc -l #直接用| 链接起来即可。-a 显示一个所有的有效连接信息列表(包括已建立的连接,也包括监听连接请求的那些连接)服务:网页浏览端口 能提供加密和通过安全端口传输的另一种HTTP。-p 显示正在使用socket的程序识别码和程序名称。服务:FTP服务器所开放的端口,用于上传、下载。-l 查询正在监听的程序。原创 2022-09-14 01:18:49 · 225 阅读 · 8 评论 -
「笔耕不辍」zookeeper的节点加密方式及分布式锁实现过程
2 .每当进程需要访问共享资源时,会调用分布式锁的lock()或tryLock()方法获得锁,这个时候会在第一步创建的lock节点下建立相应的顺序子节点,节点类型为临时顺序节点(EPHEMERAL_SEQUENTIAL),通过组成特定的名字name+lock+顺序号。3 .在建立子节点后,对lock下面的所有以name开头的子节点进行排序,判断刚刚建立的子节点顺序号是否是最小的节点,假如是最小节点,则获得该锁对资源进行访问。4 .假如不是该节点,就获得该节点的上一顺序节点,并给该节点是否存在注册监听事件。原创 2022-09-13 00:20:16 · 488 阅读 · 4 评论 -
「笔耕不辍」zookeeper集群之间如何通讯
但Zookeeper的通信中最大特点是异步的,如果请求是连续不断的,Zookeeper的处理是集中处理逻辑,然后批量发送,批量的大小也是有控制的。而leader主要承担事务的协调,当然leader也可以承担接收客户请求的功能,为了方便描述,后面的描述都是client与Follower之间的通信,如果Zookeeper的配置支持leader接收client的请求,client与leader的通信跟client与Follower的通信模式完全一样。连接客户端的Follower返回创建成功的session响应。原创 2022-09-12 00:33:40 · 502 阅读 · 6 评论 -
「笔耕不辍」zookeeper的选主过程
判断是否需要更新当前自己的选举情况.在这里是根据选举leader id,保存的最大数据id来进行判断的,这两种数据之间对这个选举结果的影响的权重关系是:首先看数据id,数据id大者胜出;如果没有接收到所有服务器的投票,那判读这个leadId是否得到了一半以后的服务器的投票代码参考,如果是则返回。3 .收到票后,会判断发送过来的逻辑时钟是否大于目前的逻辑时钟,如果是说明集群已经进入了新一轮的投票了。1 . 接收投票消息。5 . 如果等于目前的逻辑时钟,说明是当前的,则更新最大的leader id和提案id。原创 2022-09-11 00:57:42 · 510 阅读 · 4 评论 -
zookeeper实际应用场景分析
zookeeper的设计采用的是观察者的设计模式,zookeeper主要是负责存储和管理大家关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应,从而实现集群中类似 Master/Slave 管理模式。在分布式系统里,我们会把一个服务应用分别部署到n台服务器上,这些服务器的配置文件是相同的(例如:我设计的分布式网站框架里,服务端就有4台服务器,4台服务器上的程序都是一样,配置文件都是一样),原创 2022-09-10 01:10:40 · 770 阅读 · 0 评论 -
「笔耕不辍」非关系型数据库Redis核心内容
这里补充一下主键空间和设置了过期时间的键空间,举个例子,假设我们有一批键存储在Redis中,则有那么一个哈希表用于存储这批键及其值,如果这批键中有一部分设置了过期时间,那么这批键还会被存储到另外一个哈希表中,这个哈希表中的值对应的是键被设置的过期时间。设置了过期时间的键空间为主键空间的子集。不过要注意的一点是此方法不适合保存关键数据,否则一旦主服务器挂掉,如果你头脑一热简单的重启服务,那么从服 务器的数据也会跟着消失,此时,必须拷贝一份备份数据到主服务器,然后再重启服务才可以,数据的恢复稍显麻烦。原创 2022-09-09 00:31:06 · 169 阅读 · 2 评论 -
「笔耕不辍」MQ的原理以及持久化
如果没有消息中间件完成信息交换,应用开发者为了传输数据,必须要学会如何用网络和操作系统软件的功能,编写相应的应用程序来发送和接收信息,且交换信息没有标准方法,每个应用必须进行特定的编程从而和多平台、不同环境下的一个或多个应用通信。这样就算配置完成了文件持久化方式了,重启项目和ActiveMQ,发送一定消息队列之后关闭ActiveMQ服务,再启动,你可以看到之前发送的消息未消费的依然保持在文件里面,继续让监听者消费。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。原创 2022-09-08 00:28:16 · 424 阅读 · 0 评论 -
「笔耕不辍」悲观锁和乐观锁的区别以及实现方式
乐观锁( Optimistic Locking ) 相对悲观锁而言,乐观锁假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。当我们提交更新的时候,判断数据库表对应记录的当前版本信息与第一次取出来的版本标识进行比对,如果数据库表当前版本号与第一次取出来的版本标识值相等,则予以更新,否则认为是过期数据。相对于悲观锁,在对数据库进行处理的时候,乐观锁并不会使用数据库提供的锁机制。原创 2022-09-07 09:42:05 · 164 阅读 · 8 评论 -
「笔耕不辍」mysql的存储引擎详解
MySQL5.5以后默认使用InnoDB存储引擎,其中InnoDB和BDB提供事务安全表,其它存储引擎都是非事务安全表。若要修改默认引擎,可以修改配置文件中的default-storage-engine。可以通过:show variables like ‘default_storage_engine’;查看当前数据库到默认引擎。命令:show engines和show variables like 'have%'可以列出当前数据库所支持到引擎。原创 2022-09-06 14:37:39 · 157 阅读 · 2 评论 -
「笔耕不辍」mysql的索引分类B+和hash详解
MySQL目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。那么,这几种索引有什么功能和性能上的不同呢?原创 2022-09-04 00:15:52 · 275 阅读 · 4 评论 -
猿创征文|关于多线程的理解
如果队列是空的,消费者会一直等待,当生产者添加元素时候,消费者是如何知道当前队列有元素的呢?如果让你来设计阻塞队列你会如何设计,让生产者和消费者能够高效率的进行通讯呢?让我们先来看看JDK是如何实现的。使用通知模式实现。所谓通知模式,就是当生产者往满的队列里添加元素时会阻塞住生产者,当消费者消费了一个队列中的元素后,会通知生产者当前队列可用。通过查看JDK源码发现ArrayBlockingQueue使用了Condition来实现。...原创 2022-08-31 01:06:35 · 202 阅读 · 10 评论 -
猿创征文|常用消息中间件对比
erlang语言开发、性能好、高并发,支持多种语言,社区、文档方面有优势,erlang语言不利于java程序员二次开发,依赖开源社区的维护和升级,需要学习AMQP协议、学习成本相对较高以上吞吐量单机都在万级。java实现,方便二次开发、设计参考了kafka,高可用、高可靠,社区活跃度一般、支持语言较少,吞吐量单机十万。下,之前有没消费过,没有消费过就处理,并且写入这个 id 到 redis,如果消费过了,则不处理。1、增加了系统的复杂度,幂等、重复消费、消息丢失等问题的带入。1、解耦,降低系统之间的依赖。.原创 2022-08-30 02:52:17 · 158 阅读 · 2 评论 -
猿创征文|分布式事务常见解决方案
TCC模型对业务的侵入性较强,改造的难度较大,每个操作都需要有 try 、 confirm 、 cancel 三个接。分支事务的Cancel操作,若try操作全部成功,TM将会发起所有分支事务的Confirm操作,其中。3、本地消息表:基于本地数据库+mq,维护本地状态(进行中),通过mq调用服务,完成后响应一条消。TM首先发起所有的分支事务的try操作,任何一个分支事务的try操作执行失败,TM将会发起所有。引入了超时机制解决参与者阻塞的问题,超时后本地提交,2pc只有协调者有超时机制。...原创 2022-08-29 11:20:49 · 465 阅读 · 5 评论 -
猿创征文|浅谈ES-关于ES你了解多少?
索引: 从ID到内容。倒排索引: 从内容到ID。好处: 比较适合做关键字检索。可以控制数据的总量。提高查询效率。搜索引擎为什么比MySQL查询快?lucence文章 -》 term ->排序 term dictionary -> term index -》 Posting List -> [文章ID ,[在文章中出现的偏移量],权重 ]TFIDF。...原创 2022-08-28 01:49:04 · 273 阅读 · 4 评论 -
猿创征文|Java中的权限认证如何理解
认证: 就是对系统访问者的身份进行确认。用户名密码登录、 二维码登录、手机短信登录、指纹、刷脸。。。授权:就是对系统访问者的行为进行控制。授权通常是在认证之后,对系统内的用户隐私数据进行保护。后台接口访问权限、前台控件的访问权限。RBAC模型: 主体 -》 角色 -》 资源 -》访问系统的行为。认证和授权也是对一个权限认证框架进行扩展的两个主要的方面。CSRF: Cross Site Requst Forgery 跨站请求伪造。...原创 2022-08-27 01:49:17 · 722 阅读 · 0 评论 -
猿创征文|Java中常见IO的原理及适用场景
正如前面所说,Socket通信是一个全双工的方式,如果有多个线程同时进行远程方法调用,这时建立在client server之间的socket连接上会有很多双方发送的消息传递,前后顺序也可能是乱七八糟的,server处理完结果后,将结果消息发送给client,client收到很多消息,怎么知道哪个消息结果是原先哪个线程调用的?当请求来的话,开启的线程把请求和请求数据传送给后端资源池或者队列里面就返回,并且在全局的地方保持住这个现场(哪个连接的哪个请求等),这样前面的线程还是可以去接受其他的请求,...原创 2022-08-26 15:39:34 · 356 阅读 · 0 评论 -
常见网络协议考察知识点
我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。它可通过网络在TXP链接上传送邮件,或者简单地在同一机器的进程之间通过进程通信的通道来传送邮件,这样,邮件传输就独立于传输子系统,可在TCP/IP环境或X.25协议环境中传输邮件。即文件传输协议,它是网际提供的用于访问远程机器的协议,它使用户可以在本地机与远程机之间进行有关文件的操作。原创 2022-08-25 16:06:17 · 256 阅读 · 0 评论 -
面试中集合常问知识点总结
面试中集合常问知识点总结。原创 2022-08-22 01:18:45 · 214 阅读 · 10 评论 -
面试中常用消息中间件对比
erlang语言开发、性能好、高并发,支持多种语言,社区、文档方面有优势,erlang语言不利于java程序员二次开发,依赖开源社区的维护和升级,需要学习AMQP协议、学习成本相对较高以上吞吐量单机都在万级。高性能,高可用,生产环境有大规模使用场景,单机容量有限(超过64个分区响应明显变长)、社区更新慢,吞吐量单机百万。java实现,方便二次开发、设计参考了kafka,高可用、高可靠,社区活跃度一般、支持语言较少,吞吐量单机十万。1、增加了系统的复杂度,幂等、重复消费、消息丢失等问题的带入。原创 2022-08-22 01:10:49 · 540 阅读 · 0 评论 -
Java并发面试常见考点
Java并发面试常见考点原创 2022-08-16 12:26:12 · 262 阅读 · 26 评论 -
MySQL常见面试题
这些问题都是MySQL进行事务并发控制时经常遇到的问题。脏读: 在事务进行过程中,读到了其他事务未提交的数据。不可重复读: 在一个事务过程中,多次查询的结果不一致。幻读: 在一个事务过程中,用同样的操作查询数据,得到的记录数不相同。处理的方式有很多种:加锁、事务隔离、MVCC加锁:1、脏读:在修改时加排他锁,直到事务提交才释放。读取时加共享锁,读完释放锁。2、不可重复读: 读数据时加共享锁,写数据时加排他锁。3、幻读: 加范围锁。从锁的粒度来区分。...原创 2022-08-15 17:37:46 · 198 阅读 · 10 评论 -
后端面试必备知识点
今天为大家介绍的是关于一些面试常问的知识点。原创 2022-08-15 17:30:53 · 644 阅读 · 5 评论 -
垃圾回收与算法
在我们平时的编码过程中,基本不会去关心程序中的内存管理情况以及垃圾回收问题,主要原因是 JVM 帮助我们自动实现了。既然 JVM 已经帮我们自动完成了,那我们是不是就可以高枕无忧,不用再了解这部分的知识了呢?其实不然,如果遇到 JVM 处理不了的问题,我们也得靠自己解决,如何去更快的解决他们,就很有必要去先掌握 JVM 的垃圾回收机制以及算法实现。好了,开始进入我们今天的正文介绍。小羽将会从多个方面,带大家更全面的去了解 JVM 垃圾回收的来龙去脉~...原创 2022-08-12 15:49:03 · 286 阅读 · 6 评论