自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(95)
  • 收藏
  • 关注

原创 关注微信公众号chatjava,一起学习java,领取java架构师学习资料

Java架构师,首先要是一个高级java攻城狮,熟练使用各种框架,并知道它们实现的原理。jvm虚拟机原理、调优,懂得jvm能让你写出性能更好的代码;池技术,什么对象池,连接池,线程池等等等等……所以要想成为一个架构师,道阻且长,但是你要相信你行则将至。1、这套架构师资料适合有基础的同学去学习,所以如果你是刚刚毕业,或者刚刚参加工作,可以先去学习java开发基础,或者直接给我留言,我发java基...

2019-03-11 22:34:39 463

原创 架构10- 理解架构的模式4-数据管理模式

考虑到以下原因,我们会考虑使用索引表:尽管我们的关系型数据库通常支持非聚集索引(除了主键之外的索引),但在某些情况下,直接在大表上创建多个索引可能不利于性能。然而,需要注意的是,只有当数据的区分度较高时,索引才能发挥作用。当使用CDN后,由于用户访问的是CDN节点上的数据,问题排查可能会比较困难,因此建议引入前端错误处理框架来记录脚本错误以便快速定位问题。4. 排查问题困难性:由于使用CDN后,不同地区的用户访问的是CDN节点上的数据,一旦出现问题,排查和定位可能会比较困难。

2024-01-18 16:20:04 552

原创 架构09- 理解架构的模式3-性能和可扩展性

对于读写这两个事情,我们完全可以不用一套数据源,为读建立专门的物化视图,可以针对读进行优化,避免在读的时候做很多Join的工作,可以把性能做到极致(后面会有物化视图模式的介绍)。惠普的Vertica是一款高性能的列式分析数据库,它的一个特性就是物化视图,通过事先提供SQL语句直接缓存面向于统计的查询结果,极大程度提高了性能,也是空间换时间的思想。在实现中,RabbitMQ 3.5以上版本支持了消息优先级,使用的是第一种方式,在消息堆积缓冲时进行消息重排,消费端可以优先处理优先级高的消息。

2024-01-18 16:18:29 975

原创 架构08- 理解架构的模式2-管理和监控

这里的大使模式意思就是这么一个网络代理进程,用于和远端的服务进行通讯,完成下面的工作:服务路由、、服务熔断、服务跟踪、服务监控、服务授权、数据加密、日志记录。这也是很常见的作法,我们对外的接口可能是/cart、/order、/search这样的API,在其背后其实是不同的服务,通过网关层进行转发,不仅仅可以做后端服务的负载均衡和故障转移,在后端服务变更切换对外API路径(比如版本升级)的时候我们也可以进行灵活的路由,确保了对外接口的一致性。这种模式适用于新老系统迁移的过渡阶段,并不是永久性的架构设计模式。

2024-01-17 16:45:31 931

原创 架构07- 理理解架构的模式1

其次,这些数据只在某个时间段内有效,过了有效期后会被视为过期数据,如果对过期数据进行读取,可能导致脏读(即读取到不正确的数据),从而影响数据的正确性。另外可以实现当其中的某台服务器发生故障时,可以通过负载均衡的失效转移机制将请求转移至集群中其他的服务器上,因此可以提高系统的可用性。分层架构是逻辑上的,在物理部署上,三层架构可以部署在同一个物理机器上,但是随着网站业务的发展,必然需要对已经分层的模块分离部署,即三层结构分别部署在不同的服务器上,是网站拥有更多的计算资源以应对越来越多的用户访问。

2024-01-14 16:00:00 918

原创 架构06- 理解架构的演进示例

在新的架构中,每个拆分出来的模块成为一个独立的项目,并通过定义清晰的接口协议来实现模块之间的通信和协作。对于读写比例差距大或对数据一致性要求高的情况,可以考虑进行业务的垂直拆分,以减轻单个数据库的负载压力,实现系统的可扩展性。然而,一些跨单元的调用是无法避免的。系统中的接入层根据特定的规则将流量路由到不同的单元,这些单元内部具有高内聚性,包含核心系统和分片逻辑,以解决数据库连接的瓶颈问题。但是,由于业务的特殊性,一些跨单元的调用是无法避免的,并且一些不可拆分的业务逻辑需要放在中心单元供其他单元进行调用。

2024-01-13 17:00:00 897

原创 架构05- 理解架构的演进

总之,对于大型网站来说,单一服务器无法满足业务需求时,常用的数据库拆分手段是通过业务拆分将不同业务的数据部署在不同的物理服务器上。这样做的好处是,读取操作可以在多台服务器上并行处理,从而分担了主数据库的负载压力,提高了数据库的并发处理能力和整体性能。另外,传统的关系型数据库虽然支持基本的全文搜索功能,但对于复杂的搜索需求,如全文检索、相关性排序等,则需要借助专门的搜索引擎来实现。在选择架构时,需要根据当前业务需求进行,并在满足业务需求的前提下,确保架构具备足够的扩展性,同时避免过度设计。

2024-01-13 12:00:00 904

原创 架构04-架构的分层

涉及到负载均衡、分级管理、应用缓存、服务集群、快速失败、异步调用、服务降级、消息队列、幂等设计等技术,以提高应用的性能、可伸缩性和可靠性。此外,还有一些成熟的类库、中间件和Web服务框架,如Apache Commons、nginx、Apache CXF等,它们提供了各种通用的功能和组件,用于增强系统的稳定性、扩展性和性能。通过服务层的封装,可以方便地提供统一的接口和功能,降低开发的复杂性。系统采用了七层逻辑架构,包括客户层、前端优化层、应用层、服务层、数据存储层、大数据存储层和大数据处理层。

2024-01-12 15:28:59 1053

原创 架构03 - 理解构架的视角

统一语言,软件的开发人员/使用人员都使用同一套语言,即对某个概念,名词的认知是统一的,建立清晰的业务模型,形成统一的业务语义。通过建模,更好的表达现实世界中的复杂业务,随着时间的发展,不断增加系统对实际业务的沉淀,也将更好的通过清晰的代码描述业务逻辑,模型的内聚增加了系统的高度模块化,提升代码的可重用性,对比传统三层模式中,很有可能大量重复的功能散落在各个 Service 内部。这样的设计不仅可以提高开发效率,还能够增加系统的可维护性和扩展性,并且能够充分利用现有的技术和成熟的解决方案。

2024-01-12 15:26:49 796

原创 架构02 - 架构的基础: 特点,本质...

作为架构师,主要职责是培养思维能力,通过合理的分解和抽象来理解复杂系统,理解并解析需求,创建有用的模型,确认、细化和扩展模型,并管理整个架构过程。同时,架构师还需要进行系统分解,形成整体架构,正确选择技术方案,制定技术规范,并有效推动实施和落地。另外,对于复杂问题,可以进行抽象和分解,采取分而治之的策略。架构是对系统中各个实体以及它们之间关系的抽象描述,是对功能和形式元素之间对应关系的分配,也是对元素之间关系及与周边环境关系的定义。最后,需要注意的是,复杂性的应对是一个持续的过程,没有一劳永逸的解决方案。

2024-01-11 17:58:28 421

原创 架构01 - 知识体系详解

架构的主要作用是提供一个全面且系统化的视角,帮助人们理解和应用相关知识,并指导系统的设计、开发和演化过程。需要强调的是,架构的稳定性和安全性是一个持续的过程,需要在设计和实施过程中一直保持关注,并及时对新的威胁和挑战进行调整和应对。总之,学习架构时,要意识到不同人的视角是有差异的,并根据自己的角色和职责选择性地深入学习相关的架构知识。此外,在高可用架构中,负载均衡也是重要的策略之一。- 数据备份与恢复:建立健全的数据备份和恢复机制,确保系统数据的完整性和可恢复性,以应对可能发生的数据丢失或损坏情况。

2024-01-11 17:55:37 546

原创 Redis实现滚动周榜|滚动榜单|直播间榜单|排行榜|Redis实现日榜05

处理数据的平滑过渡:在获取到特定时间段的数据后,我们需要对数据进行处理,使其能够平滑过渡。需要注意的是,无论是获取7天榜单、30天榜单还是更长时间段的数据,这三个操作都是固定的,只是根据具体的日期和时间间隔进行相应的调整和处理。5. 29号的定时任务不需要处理29号当天的数据(29号有数据时会同步写到30号),也不需要处理30号(因为30号是明天,还没有数据)。具体来说,在编写代码时,我们需要执行以下三个操作。7. 因为今天是29号,前5天的数据已经确定,所以可以直接计算并递增到30号的滚动榜的key上。

2023-12-29 17:21:11 633

原创 Redis实现滚动周榜|滚动榜单|直播间榜单|排行榜|Redis实现日榜04

近七天滚动榜单,近三十天滚动榜单实现方式

2023-12-28 17:33:30 633

原创 Redis实现滚动周榜|滚动榜单|直播间榜单|排行榜|Redis实现日榜03

滚动排行榜与一般排行榜的最大区别在于数据的存储和查询方式。在一般排行榜中,起始点是固定的,例如某一周或某一个月,存储和查询时的时间范围也是固定的。而滚动排行榜则不同,在滚动排行榜中,榜单的取值范围是随着时间的变化而不断变化的。

2023-12-27 16:04:33 1248

原创 Redis实现日榜|晋级榜单|直播间榜单|排行榜|Redis实现日榜02

redis晋级榜单的难点说明

2023-12-22 17:47:57 1074

原创 Redis实现日榜|直播间榜单|排行榜|Redis实现日榜01

redis的zset实现日榜

2023-12-22 15:42:41 1206

转载 Mac iterm2 开启密钥转发功能

Mac iterm2 开启密钥转发功能公司使用一台机房服务器作为跳板机,可以登录阿里云的各个服务器。问题是每天都需要使用 SecureCRT 登录一遍,才可以使用 iterm2 登录远程机器。iterm 配置密钥ssh-keygenchmod 600 id_rsa123公钥拷贝到跳板机iterm 配置 ssh 远程登录name 可以自己定,方便自己记忆即可。Comma...

2019-07-25 13:50:41 1084

原创 java面试题之volatile和synchronized的使用方法和区别

我们先来看一下Java 内存模型中的可见性、原子性和有序性。可见性:可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。原子性:原子是世界上的最小单位,具有不可分割性。synchronized块之间的操作就具备原子性。volatile关键字定义的变量就可以做到这一点,Java还有两个关键字能实现可见性,即synchronized和final。有序性...

2019-03-10 16:10:30 8317 2

原创 Dubbo的原理,面试常见问题

可能我们在平常工作中都会用到dubbo,但是好多同学只是知道应用但是却不一定知道他的原理,今天来说一说dubbo的原理,首先我们要知道dubbo到底是什么,都能提供些什么服务?一、dubbo是什么?dubbo是⼀个分布式服务框架,提供⾼性能和透明化的RPC远程服务调⽤⽅案,以及SOA服务治理方案。说白了其实dubbo就是一个远程调用的分布式框架。二、dubbo的核心服务是什么?...

2019-03-07 23:36:28 32898 1

原创 ActiveMQ消息发送过程与原理浅析

MQ简介:  MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入列队的针对应用程序的数据(消息)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行...

2019-03-05 23:28:20 1475

原创 checkbox在后台java的获取方法

<li> <label class="enterText">供应商类别:</label> <p class="enterRadio"> <input type="checkbox" value="固定收益&quo

2019-03-03 19:20:45 21161 3

原创 Netty自学-Netty学习(一)

什么Netty?Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。关注公众号,我们一起学java也就是说,Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化...

2019-03-03 19:19:54 11365

原创 java操作时间,将当前时间减一年,减一天,减一个月

在Java中操作时间的时候,常常遇到求一段时间内的某些值,或者计算一段时间之间的天数 Date date = new Date();//获取当前时间 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.YEAR, -1);//当前时间减去一年,即一年前的...

2019-03-03 19:18:52 51664 2

原创 mybaties中的insert into select 用法,mybaties批量插入

在最近的项目中用到了站内信功能,需求是站内信要发给所有用户和指定用户,为了优化数据库的性能,极大的减少访问数据库的次数,所以在mybaties中用到了批量删除,直接上代码吧!关注公众号,我们一起学java1.发送给部分用户,批量插入功能MessageDaoImpl.java public void sendPartMessage(List<UserMessage&g...

2019-03-03 19:17:49 22432

转载 tomcat结合nginx实现多个tomcat同时运行,tomcat负载均衡

相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额。那究竟它有什么作用呢?可能很多人未必了解。说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了。摘一段百度百科上的描述:关注公众号,我们一起学javaHtml代码反向代理(ReverseProxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内...

2019-03-03 19:17:10 12002 1

原创 redis学习五,redis集群搭建及添加主从节点

redis集群在redis3.0之前,出现了sentinel工具来监控各个Master的状态(可以看上一篇博客)。如果Master异常则会做主从切换。选举一个slave作为新的Master,3.0之后出现了集群。集群的搭建至少需要3个Master在这里我只在一台装有linux系统装3个Master和3个slave作为测试。关注公众号,我们一起学javalinux主机的ip为192...

2019-03-03 19:15:04 2466

原创 redis学习三,Redis主从复制和哨兵模式

Redis主从复制1.Master可以拥有多个slave2.多个slave可以连接同一个Master外,还可以连接到其他的slave3.主从复制不会阻塞Master在主从复制时,Master可以处理client请求。4.提供系统的伸缩性。关注公众号,我们一起学java主从复制的过程1.slave与Master建立连接,发送sync同步命令。也就是说当用户在Mast...

2019-03-03 19:13:42 13401

原创 String 转化成java.sql.Date和java.sql.Time

String类型转换成java.sql.Date类型不能直接进行转换,首先要将String转换成java.util.Date,在转化成java.sql.Date/** * @param 返回java.sql.Date格式的 * */ public static java.sql.Date strToDate(String strDate) { St...

2019-03-03 19:12:11 22982 2

原创 SpringMVC配置双数据源,一个java项目同时连接两个数据库

数据源在配置文件中的配置<pre name="code" class="java"><?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.

2019-03-03 19:10:51 45133 4

原创 redis发布订阅消息

一、Redis服务器端的安装和客户端Jedis的安装1.下载Redis 下载地址:http://redis.googlecode.com/files/redis-2.4.8.tar.gz2.安装Redis在linux下运行如下命令进行安装。Shell代码$tarxzfredis-2.4.8.tar.gz $cdredis-2.4.8 $mak...

2019-03-03 19:08:15 594

转载 java实现琏表逆序

题目:将一个有链表头的单向单链表逆序分析:链表为空或只有一个元素直接返回; 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继; 重复步骤2,直到q为空; 调整链表头和链表尾;图解:  以链表A->B->C->D为例,逆序此链表。  0.初始状态...

2019-03-01 09:57:32 239

转载 常用集合类简介及线程安全和非线程安全的集合对象

简介Java中集合类有很多,只介绍常用的集合类:   线程安全和非线程安全的集合对象一、概念:线程安全:就是当多线程访问时,采用了加锁的机制;即当一个线程访问该类的某个数据时,会对这个数据进行保护,其他线程不能对其访问,直到该线程读取完之后,其他线程才可以使用。防止出现数据不一致或者数据被污染的情况。 线程不安全:就是不提供数据访问时的数据保护,多个线程能够同时操作某...

2019-02-28 23:02:33 685

转载 Linux中让tomcat以服务service方式启动运行

1.在/etc/init.d目录下新建文件,命名为tomcat2.对tomcat文件进行编辑,执行#cd/etc/init.d/#vitomcat将下面代码粘上去#!/bin/bash#description:Tomcat7StartStopRestart#processname:tomcat7#chkconfig:...

2018-05-08 14:12:11 7973

转载 非常全面的讲解java反射

反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码))一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。要想解剖一个类,必须先要获取到该类的字节码文件对象。而解...

2018-05-08 09:57:35 286

转载 IDEA设置类模板,/**+enter自动出模板

IDEA自带的注释模板不是太好用,我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家,我不是专业玩博客的,写这篇文章只是为了让大家省事。这里设置的注释模板采用Eclipse的格式,下面先贴出Eclipse的注释模板,我们就按照这种格式来设置:类注释模板: ...

2018-04-23 11:26:17 27656 12

原创 MAC版IDEA快捷键

alt+f7查找在哪里使用 相当于eclipse的ctrl+shift+Gcommand+alt+f7 这个是查找选中的字符在工程中出现的地方,可以不是方法变量类等,这个和上面的有区别的command+F7可以查询当前元素在当前文件中的引用,然后按F3可以选择 ,功能基本同上选中文本,按command+shift+F7 ,高亮显示所有该文本,按Esc高亮消失。选中文本,按Alt+F3 ,逐个往下查...

2018-04-11 13:42:46 345

原创 Springboot整合Dubbo - 项目创建和环境搭建

1. 使用IDEA新建一个Maven项目选择Maven后,点击next下一步修改项目的pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSch...

2018-03-30 16:29:19 1709

原创 spring boot 中@Autowired注解无法自动注入的错误

SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!“Application类”是指SpringBoot项目入口类。这个类的位置很关键:如果Application类所在的包为:com.boot.app,则只会扫描com.boot.app包及其所有子包,如果service或dao所在包不在com.boot.app及其子包下,则不会被扫描!即, 把Ap...

2018-03-30 15:59:15 1901

转载 mybatis-plus使用中的常见问题

如何排除非表中字段?三种方式选择一种即可! 使用 transient 修饰 private transient String noColumn; 使用 static 修饰 private static String noColumn; 使用 TableField 注解 @TableField(exist=false)private Str...

2018-03-16 13:41:59 75872 16

原创 excel导出工具类--java开发

package com.qlchat.admin.common.util;import java.io.IOException;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.util.Date;import java.util.List;import java.u

2018-01-25 10:32:14 255

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除