自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zty

好吃懒做无所不为

  • 博客(111)
  • 资源 (1)
  • 收藏
  • 关注

原创 基于 itemCF (item collaborative filtering) 推荐(基于物品的协同过滤算法)的理解

推荐系统,一般是用于电商、广告、内容、信息流等推荐平台,以挖掘数据的最大价值。可以提升用户粘性和转化率。而本文提及到的基于内容的协同过滤算法就是一个经典的算法。基本思想首先,什么是协同呢?协同在这里指的就是,用集体的智慧来为个体过滤出他需要的信息。基于物品的协同过滤算法,就是以物品为连接点,给用户推荐那些和他们之前喜欢的物品相似的物品。 比如,该算法会因为你购买过《Java从入门到精通》而给你推荐《Java并发编程实战》。不过,基于物品的协同过滤算法并不利用物品的内容属性计算物品之间的相似度,二是通过

2022-03-04 16:51:56 1102

原创 Mac M1安装Homebrew 简单实用

1、首先创建安装目录sudo mkdir -p /opt/homebrew2、将目录属主修改为当前用户,方便直接实用brew installsudo chown -R $(whoami) /opt/homebrew3、进入/opt文件夹cd /opt4、直接下载homebrew tar包并解压curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew5、将路径增加到PAT

2021-06-25 19:00:10 1054 2

原创 Tomcat打破双亲委派

复习复习JVM类加载机制,再谈谈 Tomcat 的类加载器如何打破 Java 的双亲委托机制。JVM 的类加载器Java 的类加载,就是把字节码格式“.class”文件加载到 JVM 的方法区,并在 JVM 的堆区建立一个java.lang.Class对象的实例,用来封装 Java 类相关的数据和方法。那 Class 对象又是什么呢?你可以把它理解成业务类的模板,JVM 根据这个模板来创建具体业务类对象实例。JVM 并不是在启动时就把所有的“.class”文件都加载一遍,而是程序在运行过程中用到了这个

2021-05-16 23:12:29 276 1

原创 零拷贝

传统 IO 问题传统的 IO 将一个文件通过 socket 写出File f = new File("helloword/data.txt");RandomAccessFile file = new RandomAccessFile(file, "r");byte[] buf = new byte[(int)f.length()];file.read(buf);Socket socket = ...;socket.getOutputStream().write(buf);内部工作流程是

2021-03-31 21:10:17 226

原创 NIO基础--三大组件

non-blocking io 非阻塞 IO1. 三大组件1.1 Channel & Bufferchannel 有一点类似于 stream,它就是读写数据的双向通道,可以从 channel 将数据读入 buffer,也可以将 buffer 的数据写入 channel,而之前的 stream 要么是输入,要么是输出,channel 比 stream 更为底层#mermaid-svg-cW8kro41NMvXWohD .label{font-family:'trebuchet ms', ver

2021-03-23 22:01:35 176

原创 基于Ribbon的服务调用

说明官方网址: https://github.com/Netflix/ribbonSpring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。1.Ribbon 服务调用1.项目中引入依赖说明:1.如果使用的是eureka client 和 consul client,无须引入依赖,因为在eureka,consu

2021-03-15 20:10:37 315

原创 Flink 1.10.1 Cannot find compatible factory for specified execution.target (=local)n编辑器1

前言学习flink时写的一个本地demo在测试过程中报错,一个很简单的word count代码package com.ieg.wc;import org.apache.flink.api.common.functions.FlatMapFunction;import org.apache.flink.api.java.DataSet;import org.apache.flink.api.java.ExecutionEnvironment;import org.apache.flink.api

2021-01-05 21:46:58 169

原创 单点登录

单点登录什么是单点登录?单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分1、登录  相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授

2021-01-01 02:42:22 245

原创 Java线程中start和run的区别

start()它的作用是启动一个新线程。通过start()方法来启动新线程,处于就绪(可运行)状态,并没有运行,一旦得到cpu时间片,就开始执行相应线程的run()方法,这里方法run()称为线程体,它包含了要执行的这个线程的内容,run方法运行结束,此线程随即终止。start()不能被重复调用。用start方法来启动线程,真正实现了多线程运行,即无需等待某个线程的run方法体代码执行完毕就直接继续执行下面的代码。这里无需等待run方法执行完毕,即可继续执行下面的代码,即进行了线程切换。run()r

2020-12-13 18:51:27 1177

原创 静态方法中直接使用注入的bean对象

项目场景:最近做学校一个项目,最后接入SpringBoot单点登陆,接口啥的都是对的,就是登陆成功后回调给我的东西很奇怪为什么是分号,我人为改成问号就ok。问题描述:查看报错org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String ";"就是分号的

2020-11-30 21:28:39 935

原创 Nginx - 负载均衡配置

'Nginx’负载均衡是一种在项目调优过程中非常常见的优化措施,因为它的配置过程简单,见效快,可拓展性强所以现在很多项目都使用了这种优化措施,下面和大家分享一下我的配置过程和配置过程会遇到的一些问题。负载均衡 - 配置 # 首先,你要有两台或以上可以提供相同服务的Web服务器,不然这个负载均衡配置就没有意义! # 在配置过程中只需要改代理服务器的配置就行,其他服务器不用管。 - vim /usr/local/nginx/conf/nginx.conf .

2020-11-19 17:26:01 154

转载 Java中的锁

]1.乐观锁乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此概念对应的实际应用。先说概念。对于同一个数据的并发操作,悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改。Java中,synchronized关键字和Lock的实现类都是悲观锁。而乐观锁认为自己在使用数据时不会有别的线程修改数据,所以不会添加锁,只是在更新数据的时候去判断之前有没有别的线程更新了这个数据。如果这个数据没有被更新,当前线程

2020-11-08 22:21:51 84 1

原创 ArrayList是如何实现序列化的

从jdk源码中可以看出 /** * The array buffer into which the elements of the ArrayList are stored. * The capacity of the ArrayList is the length of this array buffer. Any * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA * w

2020-11-01 22:32:18 2231

原创 LRU缓存 Java实现

解题思路LRULRU 总体上是这样的,最近使用的放在前边(最左边),最近没用的放到后边(最右边),来了一个新的数,如果内存满了,把旧的数淘汰掉,那位了方便移动数据,我们肯定不能考虑用数组,呼之欲出,就是使用链表了,解决方案:链表(处理新老关系)+哈希(查询在不在),分析如下1.底层应该用链表,按照数据的新旧程度来排列,旧的在左边,新的在右边,新来一个加到尾部(你可以想象自己从左往右画一条链表),删除是删头,除了这两个操作,还有就是把一个数据从中间拿出来放尾巴上(这个数组就很难做到)2.这里还有一个需求

2020-10-31 16:11:35 139

原创 mac下安装并启动openoffice

openoffice下载地址:http://www.openoffice.org/zh-cn/download/国内网可能会很慢,科学上网会好些下载后会自动安装,启动服务:然后vim ~/.zshrc在.zshrc文件中增加export PATH=$PATH:/Applications/OpenOffice.app/Contents/MacOS保存退出,命令行执行:source ~/.zshrc //使环境变量立即生效启动OpenOfficesoffice -headles

2020-10-27 17:43:44 965

原创 C字符串和SDS之间的区别

总结C字符串SDS获取字符串长度的复杂度为O(N)获取字符串长度的复杂度为O(1)API是不安全的,可能会造成缓冲区溢出API是安全的,不会造成缓冲区溢出修改字符串长度N次必然需要执行N次内存重分配修改字符串N字最多需要执行N次内存重分配只能保存文本数据(不能有空格)可以保存文本或二进制数据(可以存着空格,因为SDS使用len属性的值而不是空字符来判断字符串是否结束)可以使用所有<string.h>库中的函数可以使用部分<string

2020-10-18 19:32:44 202

原创 MySQL中,小表该不该建索引?

最近刚刚朋友聊过这个问题,这里简单整理一下。标题中的 「‘对于非常小的表,大部分情况下简单的全表扫描比建立索引更高效’」 ,其实是问题 「‘索引的使用条件’」 的答案的一部分。完整答案是:对于非常小的表、大部分情况下简单的全表扫描比建立索引更高效对于中到大型的表,索引就非常有效;那么为什么对于非常小的表,大部分情况下简单的全表扫描比建立索引更高效呢?理由如下:MySQL的默认存储引擎是InnoDB,在InnoDB中索引是通过 B+ 树实现的,MySQL的数据是存储在聚簇索引(聚簇索引也叫主键索引

2020-10-14 21:37:25 1099

原创 InnoDB数据页结构总结

总结1.InnoDB为了不同的目的而设计了不同类型的页,我们把用于存放记录的页叫做数据页。2.一个数据页可以被大致划分为7个部分,分别是File Header,表示页的一些通用信息,占固定的38字节。Page Header,表示数据页专有的一些信息,占固定的56个字节。Infimum + Supremum,两个虚拟的伪记录,分别表示页中的最小和最大记录,占固定的26个字节。User Records:真实存储我们插入的记录的部分,大小不固定。Free Space:页中尚未使用的部分,大小不确定

2020-10-09 11:38:29 156

原创 TCP/IP分层模型

目前 TCP/IP 协议可以说是名气最大、使用最广泛的计算机网络,从这篇文章来会讲解 TCP 协议的历史和分层模型。将分以下两个部分TCP/IP 协议产生的历史背景TCP/IP 协议的分层模型接下来我们来讲讲 TCP/IP 协议的历史。TCP/IP 协议产生的历史背景时间回退到 1969 年,当时的 Internet 还是一个美国国防部高级研究计划局(Advanced Research Projects Agency,ARPA)研究的非常小的网络,被称为 ARPANET(Advanced Re

2020-10-08 09:52:58 468

原创 Host is blocked because of many connection errors; unblock with ‘mysqladmin‘ flush-host

问题描述同一个IP连接失败次数超过了最大的max_connection_errors=10;就会阻止连接解决方案可以调max_connection_errors=1000;或者flush_hosts mysqladmin flush-hosts有远程云服务器的连接上远程服务器之后,在这上面进行操作mysql -u root -p然后输入密码进入到mysql中flush hosts 即可...

2020-09-27 21:38:02 302

原创 Redis主从复制与哨兵机制

Redis 主从复制1 主从复制VB主从复制架构仅仅用来解决数据的冗余备份,从节点仅仅用来同步数据无法解决: 1.master节点出现故障的自动故障转移2 主从复制架构图3 搭建主从复制# 1.准备3台机器并修改配置- master port 6379 bind 0.0.0.0 - slave1 port 6380 bind 0.0.0.0 slaveof masterip masterport- slave2 port 6381 bind 0.0.0.0 slave

2020-09-27 09:15:07 94

原创 搭建dvwa环境

下载文件环境:PHP/MySQLdvwa包含了OWASP Top10的所有攻击漏洞可供测试,提供了一整套的web渗透测试环境。靶场包含Brute Force(暴力破解)、Command Injection(命令行注入)、CSRF(跨站请求伪造)、File Inclusion(文件包含)、File Upload(文件上传)、Insecure CAPTCHA (不安全的验证码)、SQL Injection(SQL注入)、SQL Injection(Blind)(SQL盲注)、XSS(Dom)(Dom型跨站脚

2020-09-21 15:15:45 1240

原创 Redis持久化机制

client redis[内存] -----> 内存数据- 数据持久化–>磁盘Redis官方提供了两种不同的持久化方法来将数据存储到硬盘里面分别是:快照(Snapshot)AOF (Append Only File) 只追加日志文件9.1 快照(Snapshot)1. 特点这种方式可以将某一时刻的所有数据都写入硬盘中,当然这也是redis的默认开启持久化方式,保存的文件是以.rdb形式结尾的文件因此这种方式也称之为RDB方式。2.快照生成方式客户端方式: BGSAVE

2020-09-20 22:20:04 3334

原创 Redis五种数据结构及基本操作

String类型1. 内存存储模型2. 常用操作命令命令说明set设置一个key/valueget根据key获得对应的valuemset一次设置多个key valuemget一次获得多个key的valuegetset获得原始key的值,同时设置新值strlen获得对应key存储value的长度append为对应key的value追加内容getrange 索引0开始截取value的内容setex设置一个key存活的有

2020-09-20 20:35:29 450

原创 Redis数据库相关指令

数据库操作指令# 1.Redis中库说明- 使用redis的默认配置器动redis服务后,默认会存在16个库,编号从0-15- 可以使用select 库的编号 来选择一个redis的库# 2.Redis中操作库的指令- 清空当前的库 FLUSHDB- 清空全部的库 FLUSHALL# 3.redis客户端显示中文- ./redis-cli -p 7000 --raw操作key相关指令# 1.DEL指令- 语法 : DEL key [key ...] - 作用 : 删除

2020-09-20 20:26:19 168

原创 免费又好用的Redis客户端工具!AnotherRedisDesktopManager

系列文章目录最近在寻找一款免费又好用的Redis客户端工具,于是找到了AnotherRedisDesktopManager,界面漂亮而且支持Redis集群,推荐给大家!文章目录系列文章目录RedisDesktopManager一、怎么找的二、使用步骤1.安装使用深色模式命令行总结RedisDesktopManager以前一直使用的是RedisDesktopManager这款Redis客户端工具,由于很久没更新界面有点古老,最近想更新升级下,进到官网一看,发现收费了…一、怎么找的于是就去G

2020-09-17 10:31:32 3107 1

原创 搭建springcloud开发环境

版本命名官网地址:https://spring.io/projects/spring-cloudSpring Cloud is an umbrella(伞) project consisting of independent projects with, in principle, different release cadences. To manage the portfolio a BOM (Bill of Materials) is published with a curated set

2020-09-17 09:51:18 392

原创 LeetCode-674. 最长连续递增序列

最长连续递增序列给定一个未经排序的整数数组,找到最长且连续的的递增序列,并返回该序列的长度。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。示例 2:输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 [2], 长度为1。注意:数组长度不会超过10000。思路:过程:count 为当前元素峰值,ans为最大峰值.

2020-09-17 09:02:04 92

原创 SpringCloud 微服务工具集v1.1入门学习——(1)

版本: Hoxton SR61.什么是微服务官网: https://www.martinfowler.com/articles/microservices.htmlIn short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and co.

2020-09-10 09:21:04 417

原创 再谈引用

强引用:最传统的“引用”的定义,是指在程序代码之中普遍存在的引用赋值,即类似“Object obj = new Object()”这种引用关系。无论任何情况下,只要强引用关系还存在,垃圾收集器就永远不会回收掉被引用的对象。软引用:在系统将要发生内存溢出之前,将会把这些对象列入回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。弱引用:被弱引用关联的对象只能生存到下一次垃圾收集之前。当垃圾收集器工作时,无论内存空间是否足够,都会回收掉被弱引用关联的对象。虚引用:一个对象是否.

2020-09-09 20:22:13 120

原创 为什么jvm不使用引用计数算法来判断对象是否已经死亡

在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着 ,哪些已经“死去”(即不可能再被任何途径使用的对象)。引用计数算法很多教科书判断对象是否存活的算法是这样的:给对象中添加一个引用计数器,每当有—个地方引用它时,计数器值就加1 ; 当引用失效时,计数器值就减1 ; 任何时刻计数器为0的对象就是不可能再被使用的。客观地说,引用计数算法( Reference Counting ) 的实现简单,判定效率也很高,在大部分情况下它都是一个

2020-09-07 16:01:33 683

原创 2020年9月最新的dubbo-admin平台搭建过程

应用截屏如图所示,dubbo-admin是一个dubbo的后台管理与监控平台。可以提供的有服务查询,服务治理,条件路由等功能的操作。以下会提供平台搭建的详细过程。正题项目地址:dubbo-admin下载方式可以为打包下载以及clone。打开cmd使用命令git clone https://github.com/apache/dubbo-admin.git进行项目的克隆。项目说明dubbo-admin-distribution:用于存放一些项目配置相关。dubbo-admin-server:

2020-09-06 16:06:44 385

原创 jvm垃圾回收三种算法对比

Mark-Sweep(标记-清除)Mark-Compact(标记-整理)Copying(复制)速度中等最慢最快空间开销少(但会有堆积碎片)少(不堆积碎片通常需要活对象的2倍大小(不堆积碎片)移动对象否是是效率上讲,复制算法是当之无愧的老大,但是浪费了太多的内存。而为了尽量兼顾上面提到的三个指标,标记-整理算法相对更平滑一些,但是效率上不如人意,它比复制算法多了一个标记的阶段,比标记-清除算法多了一个整理内存的阶段。...

2020-09-05 21:26:59 388 1

原创 可达性分析算法

可达性分析算法所谓“GC Roots”根集合就是一组必须活跃的引用。基本思路可达性分析算法是以根对象集合(GC Roots)为起始点,按照从上至下的方式搜索被根对象集合所连接的目标对象是否可达。使用可达性分析算法后,内存中的存活对象都会 被根对象集合直接或者间接连接着,搜索所走过的路径称为引用链(Reference Chain)如果目标对象没有任何引用链相连,则是不可达的,就意味着该对象已经死亡,可以标记为垃圾对象在可达性分析算法中,只有能够被根对象集合直接或者间接连接的对象才是存活对

2020-09-05 14:24:35 1788

原创 nginx转发后如何获取真实的ip地址

前言最近做一个团队的打卡系统,需要通过连接实验室WiFi来判是否人在实验室,网上千篇一律的获取主机ip的方法由于我使用了nginx反向代理,导致获取到的ip地址为127.0.0.1,这肯定是不符合我们验证标准的,还有就是失去了校验的意义了。正确姿势nginx配置这样配location / { proxy_pass http://localhost:8090; proxy_set_header X-Real-IP $remote_addr;

2020-09-05 10:35:09 5687

原创 dubbo入门学习

众所周知,看官方文档是程序员的优良传统:dubbo文档

2020-09-01 00:02:28 90

原创 intern()的使用:jdk6 vs jdk7/8

总结String的intern()的使用:jdk1.6中,将这个字符串对象尝试放入串池。如果串池中有,则并不会放入。返回已有的串池中的对象的地址如果没有,会把此对象复制一份,放入串池,并返回串池中的对象地址。jdk1.7开始,将这个字符串尝试放入串池。如果串池中有,则并不会放入。返回已有的串池中的对象的地址如果没有,则会把对象的引用地址复制一份,放入串池,并返回串池中的引用地址。...

2020-08-28 21:49:46 122

原创 说一说八种基本数据类型及其包装类

简介Java基本数据类型分为四大类:整数型:byte,short,int,long浮点型:float,double逻辑型:boolean字符型:char原始类型原始类型所占的字节包装类byte1个字节Byteshort2个字节Shortint4个字节Integerlong8个字节Longfloat4个字节Floatdouble8个字节Doubleboolean1个字节Booleanchar2个字节Ch

2020-08-28 19:28:23 850

原创 LeetCode 130. 被围绕的区域

给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。示例:X X X XX O O XX X O XX O X X运行你的函数后,矩阵变为:X X X XX X X XX X X XX O X X解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 ‘O’ 都不会被填充为 ‘X’。 任何不在边界上,或不与边界上的 ‘O’ 相连的 ‘O’ 最终都会被填充为 ‘X’。如果两个元素在水平或垂直

2020-08-11 23:06:33 67

原创 696. 计数二进制子串

计数二进制子串给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起的。重复出现的子串要计算它们出现的次数。示例 1 :输入: “00110011”输出: 6解释: 有6个子串具有相同数量的连续1和0:“0011”,“01”,“1100”,“10”,“0011” 和 “01”。请注意,一些重复出现的子串要计算它们出现的次数。另外,“00110011”不是有效的子串,因为所有的0(和1)没有组合在一起。示例 2 :输入:.

2020-08-10 18:01:55 88

springboot将excel存入mysqldemo

利用springboot 将excel对应字段读取 转存如mysql中 提供一个模板

2019-09-05

空空如也

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

TA关注的人

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