- 博客(310)
- 收藏
- 关注
原创 淘宝技术架构演进
到此为止,应用服务、核心服务、基础服务、数据存储都做了切分,通过高性能服务框架(HSF)、分布式数 据层(TDDL)、消息中间件(Notify)和Session框架支持了这些 切分。一个美高度稳定、可扩展、低成本、快速迭代、的淘宝的3.0系统走上了历史的舞台。在这个分布式系统的支持下,更多的业务迅速开发出来了, 因为任何一个业务都基于淘宝的商品、交易、会员、评价等基础体系,而这些基础体系就像“云”一样存在,现在可以随处调用了。
2023-03-24 01:40:12
2078
原创 最大子段和 - 分治递归算法C++实现
最大字段和有很多种解法,分治递归也有其优点,这里实现一下。时间复杂度 :n log(n)空间复杂度O(1)没有占用额外空间#include <iostream>#include <math.h>using namespace std;int bestI = -1, bestJ = -1,bestSum = -0x3f3f3f3f;int* a = new int[100];int maxSum(int* a, int left, int right) { if (
2022-03-17 23:27:55
854
3
原创 控制反转与依赖注入详解
文章目录前言例子控制反转DI的方式构造函数注入set注入接口注入Service Locator学习资源前言前段时间看了Spring源码,有许多概念不是很清晰,所以看了一些资料,有不少收获,在此总结一下Inversion of Control Containers and the Dependency Injection pattern.这篇文章。目前java的轻量级容器非常流行,可以把不同项目的组件装配起来,进而成为一个独立的应用。而这些容器底层都是用同一种模式来进行组件的装配,也就是“IOC(Inv
2022-03-16 00:01:28
3208
原创 源码阅读 - ClassPathXmlApplicationContext解析(三)
文章目录本文概述prepareBeanFactory(beanFactory);postProcessBeanFactory(beanFactory);invokeBeanFactoryPostProcessors(beanFactory);registerBeanPostProcessors(beanFactory);initMessageSource();initApplicationEventMulticaster();onRefresh();registerListeners();finishBea
2022-03-07 22:15:00
380
原创 Java笔试常用库函数
1.字符串转数组String s = "13";char[] str = s.toCharArray();2.数组排序对下标1,2,3排序,按照从小到大。不写比较器是从大到小。 public static void main(String[] args){ Integer[] nums = new Integer[]{1,6,8,2,3,4}; Arrays.sort(nums, 1, 4, new Comparator<Integer>() {
2022-02-27 19:35:01
990
原创 ClassPathXmlApplicationContext源码(二) - BeanFactory的初始化、加载、注册过程
本文概述上文 如何初始化上下文、解析资源路径 主要介绍了super(parent)和setConfigLocations(configLocations) 两个方法,接下来将主要介绍容器初始化refresh函数中prepareRefresh(),obtainFreshBeanFactory()方法。 public ClassPathXmlApplicationContext( String[] configLocations, boolean refresh, @Nullable Applicat
2022-02-20 23:35:50
604
原创 ClassPathXmlApplicationContext源码(一) - 初始化应用上下文、解析资源路径
文章目录本文概述使用示例主要功能源码阅读super(parent)this()setParent(parent)setConfigLocationsgetEnvironment()resolveRequiredPlaceholders(path)本文概述上文已经通过 初始化项目步骤 介绍了项目的基本情况,下午将详细介绍ClassPathXmlApplicationContext的功能,初始化,解析路径字符串两个部分。使用示例这是一个独立的应用程序上下文,将普通路径解释为类路径资源名,并从中获取上下文
2022-02-20 10:47:15
847
原创 简述Redis的持久化、主从结构、流水线
源于《Redis实战》文章目录持久化RDBAOF主从结构复制主从链一致性\性能事务流水线性能瓶颈持久化有两种持久化方式,可以配合使用。RDB简介:快照,某一时刻所有数据写入硬盘。使用:把快照复制到其他服务器备份、重启服务器的时候使用。创建方法:BGSAVE命令(Windows不支持):Redis会fork个子进程,然后子进程把快照写入硬盘,父进程继续处理新命令。一般留30%-45%的内存用于执行命令,创建记录写命令的缓冲区。SAVE命令:创建完成快照之前不会接受新的命令,优点是节省内存。
2022-02-14 23:06:46
494
原创 多Pom文件项目,如何维护好jar包版本?
拆分模块原因使用Java技术开发的工程,随着时间的推移,代码增多,目录结构变复杂,这时候工程的进展就会遇到各种问题:(1)不同业务的代码相互耦合。系统出现问题后难排查定位、修正。(2)增加了新手介入开发的成本,需要有一个熟悉整个项目的开发者维护整个项目的结构。(3)开发者对自己或者他人负责的代码边界很模糊,修改了他人负责的代码但对方不知道,责任追踪很麻烦。因此,我们可以把项目拆成多个模块。多模块的划分可以降低代码之间的耦合性(从类级别的耦合提升到jar包级别的耦合),模块还规范了代码边界的划分,
2021-11-30 21:57:20
1290
原创 Spring源码阅读 - 创建项目
前言学习java已经将近一年了,经常使用Spring、SpringBoot,但在工作中经常遇到bug,不会定位、解决。因此决定阅读源码,加深对框架的理解。创建项目勾选(作用在下文有提到)2.命名项目结构如下,勾选Spring的功能是下载Spring的jar包到lib中,勾选Web Application的作用是自动生成web文件夹,web.xml放一些配置,index.jsp是jsp页面。接下来我们配置spring-config.xml文件在src之下。<?xml
2021-11-24 00:21:16
450
原创 阅读源码时IDEA好用的快捷键
文章目录Ctrl+H 查看类的继承关系Ctrl +Alt+H 查看方法调用过程Ctrl +Alt+Shift+u 查看继承图Ctrl+H 查看类的继承关系Ctrl +Alt+H 查看方法调用过程Ctrl +Alt+Shift+u 查看继承图
2021-11-23 23:34:15
610
原创 小工具 - jar包转换为Maven的pom依赖
参考文档将已有项目jar包转换为maven的pom.xml配置流程新建maven项目把jar包放进来添加项目依赖 <dependencies> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.8.3&
2021-11-09 11:21:27
1089
1
原创 Hibernate级联操作
基础知识框架概述工作原理一对多关系数据库:一个客户对应多个订单,数据库中一是主表,多是从表,通过主键外键来维系。 Customer(id,name) orders(id,name,cid)。【注意:加粗的是主键】java:Customer类定义如下,Orders略hibernatexml文件如下set 配置实体类中集合属性,name实体类的属性名,table表名,key外键,onetomany 结合泛型的实体类对应。many-to-one 实体类对应的对象属性,name
2021-10-28 13:44:23
350
原创 《Redis实战》 - 初识Redis
简介特点Redis(Remote Dictionary Server) 速度很快的非关系型内存数据库,支持持久化。用于高性能,空间小的场景。String SET GET DELList RPUSH LRANGE LINDEX LPOPSet SADD SMEMBERS SISMEMBER SREM SINTER/SUNION/SDIFFHashSet HSET HGET
2021-10-22 21:22:16
503
原创 秒杀系统 - 隐藏地址/图片验证码/redis实现接口限流防刷
隐藏地址+图形验证码目的这么做主要是为了防止客户端提前拿到接口地址,在秒杀开始的时候直接调用秒杀接口。思路本次实验做法:/getPath获取秒杀链接,之后访问新链接进行秒杀。getPath中要验证图形验证码的结果是否正确。本次实验缺点:因为真正的秒杀地址为/miaosha+{/getPath获取的data},仍然可以通过get请求获得真正秒杀地址。更好的做法:调用/getPath接口可以返回一个页面的url,让浏览器跳转到这个新的url页面,新的页面才是真正的秒杀页面。实现获取图形验证码图片
2021-08-28 12:52:23
887
原创 剑指Offer - 数值的整数次方
描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。示例1输入:2.00000,3返回值:8.00000示例2输入:2.10000,3返回值:9.26100示例3输入:2.00000,-2返回值:0.25000分析写一个pow函数,注意指数的正负,是否为0这些条件。代码public class Soluti
2021-08-11 23:33:39
184
原创 剑指Offer - 二进制中1的个数
描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。示例1输入:10返回值:2分析如果不仔细想的话还觉得很简单,但要注意细节:负数。不能这样: while(n!=0) { if(n&1) { count++; } n = n>>1; }因为n==-1的时候会死循环。 int flag = 1; while(flag != 0) { if(n&flag != 0) { cnt++;
2021-08-11 23:09:34
145
原创 剑指Offer - 剪绳子
描述给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],…,k[m]。请问k[1]x…xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。输入描述:输入一个数n,意义见题面。(2 <= n <= 60)示例1输入:8返回值:18分析数据量很小,直接枚举所有情况,把已经算好的中间结果存起来可以减少重复运算。代码publ
2021-08-11 22:31:04
166
原创 剑指Offer - 机器人的运动范围
描述地上有一个rows行和cols列的方格。坐标从 [0,0] 到 [rows-1,cols-1]。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于threshold的格子。 例如,当threshold为18时,机器人能够进入方格[35,37],因为3+5+3+7 = 18。但是,它不能进入方格[35,38],因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?范围:1 <= rows, cols<= 10
2021-08-11 00:01:54
126
原创 剑指Offer - 矩阵中的路径(深搜)
描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如:矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。示例1输入:[[a,b,c,e],[s,f,c,s],[a,d,e,e]],“abcced”返回值
2021-08-10 22:31:21
150
原创 剑指Offer - 旋转数组的最小数字
描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。示例1输入:[3,4,5,1,2]返回值:1归纳一个非递减的数组,前几个数字被整体移到了结尾,求最小数字。二分思路:答案在left和right之间,mid = (left+right)/2,注意这个mid向下取整。如果array[left]==array[mid]==array[right]无法判
2021-08-10 00:03:55
138
原创 剑指Offer - 用两个栈实现队列
描述用两个栈来实现一个队列,分别完成在队列尾部插入整数(push)和在队列头部删除整数(pop)的功能。 队列中的元素为int类型。保证操作合法,即保证pop操作时队列内已有元素。示例:输入:[“PSH1”,“PSH2”,“POP”,“POP”]返回:1,2解析:“PSH1”:代表将1插入队列尾部“PSH2”:代表将2插入队列尾部"POP“:代表删除一个元素,先进先出=>返回1"POP“:代表删除一个元素,先进先出=>返回2示例1输入:[“PSH1”,“PSH2”,“P
2021-08-09 23:29:01
151
原创 剑指Offer - 二叉树的下一个结点
描述给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示示例输入:{8,6,10,5,7,9,11},8返回:9解析:这个组装传入的子树根节点,其实就是整颗树,中序遍历{5,6,7,8,9,10,11},根节点8的下一个节点就是9,应该返回{9,10,11},后台只打印子树的下一个节点,所以只会打印9。输入
2021-08-09 23:15:10
190
原创 剑指Offer - 重建二叉树
描述给定某二叉树的前序遍历和中序遍历,请重建出该二叉树并返回它的头结点。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。提示:1.0 <= pre.length <= 20002.vin.length == pre.length3.-10000 <= pre[i], vin[i] <= 100004.pre 和 vin 均无重复元素5.vin出现的元素均出现在 pre里6.只需要返回根结点
2021-08-09 22:35:35
173
原创 剑指Offer - 从尾到头打印链表
题干已知数据结构/*** public class ListNode {* int val;* ListNode next = null;* * ListNode(int val) {* this.val = val;* }* }**/代码一ArrayLit是Java的链表类,可以用它模拟一个栈,直接遍历返回结果。缺点是耗费了额外的空间。import java.util.ArrayL
2021-08-09 21:12:12
157
原创 秒杀系统 - rabbitmq从零到会用
文章目录安装SpringBoot集成RabbitMQRabbitMQ的4种交换机模式优化秒杀系统优化思路优化后的代码秒杀接口Sender.java用来发送消息。MQConfig.java用来定义队列Receieve.java接收消息,减库存下订单。安装我在服务器上用命令的时候报错了,建议使用其他方式,比如Ubantu无网环境下安装RabbitMQ(使用.deb包)SpringBoot集成RabbitMQ添加依赖(版本取决于parent) <dependency>
2021-08-05 00:00:27
1206
原创 秒杀系统 - 热点数据加缓存/前后端分离
文章目录对象缓存页面缓存为什么要加缓存?加缓存前加缓存后URL缓存加缓存前加缓存后对象缓存缓存前缓存后参考资料对象缓存Web应用的数据库表很多,如果频繁进行数据库查询,很容易导致数据库不堪重荷。为了提供查询的性能,会将查询后的数据放到内存中进行缓存,下次查询时,直接从内存缓存直接返回,提高响应效率。比如常用的缓存方案有memcached,redis等。页面缓存为什么要加缓存?页面加载时间会显着影响用户体验,谷歌的实验表明,加载时间仅相差半秒,就可以将网络流量减少多达20%。而页面缓存技术可以改善网
2021-07-25 21:14:55
829
3
原创 xxx.jar中没有主清单属性的解决方法
原因在这篇博客:解决 xx.jar中没有主清单属性 问题但是按照他给的pom文件写法没有解决问题,可以试下这个: <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId>
2021-07-25 02:08:04
340
原创 秒杀系统-JMeter压测
JMeter入门2.自定义变量模拟多用户JMeter命令行使用Redis压测工具redis-benchmarkSpring Boot打war包
2021-07-22 23:51:15
451
原创 秒杀系统 - 秒杀功能页面开发
文章目录概述说明页面展示实现商品列表商品详情秒杀详情订单详情概述说明为了展示好业务逻辑,把不必要的样式去掉了。页面展示1.商品列表2.商品详情3.订单详情实现商品列表登录按钮处的逻辑,跳转到to_list。$.ajax({ url: "/login/do_login", type: "POST", data:{ mobile:$("#mobile").val(), var inputPass = $("#password
2021-07-15 22:45:04
899
原创 ip addr命令解析
ip addr命令的作用是在Linux系统上查询ip地址。命令效果如下:解析:lo(loopback)环回接口,常被分配到127.0.0.1,用于本机通信,经过内核处理后直接返回,不会在任何网络中出现。net_device flags:LOOPBACK,UP,表示网卡处于启动的状态LOWER_UP物理连接正常,就是网卡已经上电(物理指的是物理层)BROADCAST表示这个网卡有广播地址,可以发送广播包MULTICAST表示网卡可以发送多播包MTU1500是指什么意思呢?是哪一层的
2021-06-30 22:42:22
11848
2
原创 人工智能 - 手写BP神经网络(Java)
文章目录实验内容算法说明伪代码正向传播激活函数代价函数权重调整实验内容已知UV254去除率(%)与入口的UV254浓度和臭氧浓度(mg/L)有着密切的关系,以下数据是专家在臭氧比较密集的地方测量到的一系列实验数据,试以1-20组数据为训练样本,预测第21-25组的UV254去除情况。训练数据文件:TrainingData.csv测试数据文件:TestingData.csv算法说明伪代码训练部分 while true: 1.正向传播: 输入样本 -> 输入层 -> 各隐层
2021-06-21 00:06:39
873
8
原创 SpringBoot框架中的Entity,DAO,Service,Controller层的关系与代码示例
文章目录数据库说明domain层简介实现Contorller层简介实例Service层简介实例设计接口StudentInfoService接口实现类StudentInfoServiceImplDao层简介实例设计StudentInfoDao 接口新增配置文件StudentMapper.xml运行请求测试错误处理DAO层建立在Service层之下,而Service层又是在Controller层之下的。Service层作为中间层,既调用DAO层的接口,又要提供接口给Controller层的类来进行调用。整体
2021-06-15 00:55:33
8552
4
原创 操作系统 - 银行家算法Java实现
文章目录算法描述流程图代码实现变量说明Java实现算法描述程序实现思路银行家算法顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。把一个进程需要和已占有资源的情况记录在进程控制中,假定
2021-06-12 14:26:20
1566
1
原创 操作系统 - 存储管理实验Java实现(固定式分区分配)
文章目录目的要求实验题固定式分区分配要求题目分析固定式分区分配分区的分配分区的回收批处理作业代码伪代码代码实现目的要求通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉虚存管理的各种页面淘汰算法。通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。实验题固定式分区分配要求设计一个固定式分区分配的存储管理方案,并模拟实现分区的分配和回收过程。可以假定每个作业都是批处理作业,并且不允许动态申请内存。为实现分区的分配和回收,可以设定一个分区说明表,按照表中的有关信息
2021-06-11 21:56:37
5084
4
原创 操作系统 - 作业调度实验Java实现(FCFS SJF HRRN)
实验要求为单道批处理系统设计一个作业调度程序。由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU 时限等因素。作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。每个作业由一个作业控制块 JCB 表示,JCB 可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待 W(Wait)、
2021-06-03 14:07:08
2451
9
原创 人工智能 - K近邻分类算法的Java实现
文章目录KNN简介特点K值选择实验要求实现伪代码Java代码运行结果KNN简介KNN的全称是K Nearest Neighbors。K个最近邻居,K的取值肯定是至关重要的。 KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。举个例子:如果K=3,绿色圆将被分类为红色三角形。如果K=5,绿色圆被分类为蓝色四方形类。距离计算方程:特点KNN是一种非参的,惰性的算法模型。非参: 这个模型不会对数据做出任何的假设,也就是说KNN建立的模型结构是根
2021-06-03 01:49:34
624
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅