- 博客(66)
- 资源 (1)
- 问答 (2)
- 收藏
- 关注
原创 Java查询Mysql数据库时区问题(相差13/14)个小时
默认把查询出的时间当作Central Standard Time (USA) 美国中央时区 (UTC-6)处理,转换为当前服务所在的时区东八区,差13-14个小时(夏令时和冬令时)。UTC是国际无线电咨询委员会制定和推荐的,若与GMT时差大于0.9秒,则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。中国大陆、中国香港、中国澳门、中国台湾、蒙古国、新加坡、马来西亚、菲律宾、西澳大利亚州的时间与UTC的时差均为+8,也就是UTC+8。表示的是数据库所在服务器的时区。
2022-09-27 19:36:25
1499
2
原创 第12节:Sentinel入门安装+限流规则
1、什么是Sentinel雪崩问题:当服务A依赖的服务B出现故障,服务A中的请求一直等待,导致服务A中的连接数变高,最终可能导致服务A也出现问题,然后依赖服务A的服务也出现问题,导致整个微服务集群出现问题。解决方法:添加超时时间,不会一直等待舱壁模式:限定每个业务使用的线程数,避免某个服务耗尽所有资源。不过会造成资源浪费熔断降级:由断路器统计业务执行的异常比例,如果超出阈值就会熔断该业务,拦截访问该业务的一切请求。流量控制:限制业务访问的QPS,避免服务因为流量的突增而故障。Sentin
2022-04-17 16:36:48
950
4
原创 第11节:Docker基本操做
1、镜像相关命令镜像名称一般分两部分组成:[repository]:[tag]。在没有指定tag时,默认是latest,代表最新版本的镜像。比如mysql:5.7 mysql指的是repository,5.7是tag。docker builder构建一个镜像dicker images 查看本地镜像docker rmi xxx 删除镜像docker push 推送镜像到远程仓库docker pull 拉取镜像docker save保存镜像为压缩包docker load 加载压缩包为
2022-04-10 15:33:26
3552
原创 第10节:Docker入门+下载安装配置
1、项目部署问题大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题:1.每个应用在Linux服务器部署的时候,都需要一些准备工作,因为需要安装各自依赖和函数库,不同的应用依赖可能不同,也可能是版本不同,导致关系很复杂,产生兼容问题。2.不同环境有差异,开发,测试、生产环境。比如不同环境操作系统不同,或者版本不同。导致项目的部署特别费时。2、初识Docker2.1、对于不同的依赖docker将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包,将每个应用放到一个隔离容器去运
2022-04-09 18:03:18
1480
原创 第九节:统一网关Gateway
1、为什么需要网关当我们有很多的微服务,如果直接对外开放访问,比较危险。因此我们增加一层网关。对用户请求做身份认证、权限校验,将用户请求路由到微服务,并实现负载均衡对用户请求做限流。2、网关的技术实现在SpringCloud中网关的实现包括两种:1、gateway2、zuulZuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。3、搭建网关服务3.1、创建新模块项目中
2022-04-05 18:26:02
594
原创 第八节:http客户端Feign的使用
1、RestTemplate问题String url = "http://userservice/user/" + order.getUserId();User user = restTemplate.getForObject(url, User.class);存在下面的问题:1.代码可读性差,编程体验不统一。2、参数复杂URL难以维护2、Feign介绍Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign其作用就是帮助我们优
2022-04-04 18:04:12
694
原创 第七节:Nacos集群搭建
Nacos集群搭建1.集群结构图官方文档:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。我们计划的集群结构:三个nacos节点的地址:节点ipportnacos1192.168.150.18845nacos2192.168.150.18846nacos3192.168.150.18
2022-04-04 16:54:52
96
原创 第六节:Nacos配置管理
1、Nacos配置管理统一配置管理:我们服务中配置如果都放在代码中或者项目里的配置文件中,那么我们如果要修改配置,就不得不修改代码,提交上线,重启服务。如果我们使用统一配置管理,就可以在服务启动的时候从配置管理服务读取配置,启动后,修改配置后,也会主动通知我们的服务。1.1、新建配置点击新建配置DataId是唯一的,所以,命名需要注意,这里使用服务名+环境标识。group默认,配置格式选择yaml,内容填写需要热更新的配置。添加配置内容点击页面最后的发布点击页面最后的发布2、服
2022-04-04 16:29:21
2925
原创 第五节:Nacos服务搭建和负载均衡规则
1、认识NacosNacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。2、安装参照官网:https://nacos.io/zh-cn/docs/quick-start.html0.版本选择您可以在Nacos的release notes及博客中找到每个版本支持的功能的介绍,当前推荐的稳定版本为2.0.3。1.预备环境准备Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven
2022-03-27 18:19:44
5298
原创 第四节:Ribbon负载均衡使用
1、注入的方式添加Bean @Bean public IRule getRule(){ return new RandomRule(); }再次启动项目,发送请求,就是随机的了。实现方式在这RibbonClientConfiguration中: @Bean @ConditionalOnMissingBean public IRule ribbonRule(IClientConfig config) { if (this.propertiesFacto
2022-03-27 16:16:21
323
原创 第三节:Ribbon负载均衡Rule详解
1、负载均衡流程1.orde-service发起请求经过Ribbon2.Ribbon到eureka-server中拉取服务列表3.Ribbon负载均衡选择服务4.然后修改请求url,将服务名替换为真正的url地址发起请求。2、Ribbon负载均衡实现public class LoadBalancerInterceptor implements ClientHttpRequestInterceptor { @Override public ClientHttpResponse interce
2022-03-27 14:45:57
995
原创 第二节:使用Eureka注册发现
1、服务消费者和提供者提供者:提供服务的一方消费者:调用服务的一方一个服务既可以是提供者也可以是消费者。2、Eureka注册中心2.1、Eureka的作用消费者如何获取服务提供者具体信息?服务提供者启动时向eureka注册自己的信息eureka保存这些信息消费者根据服务名称向eureka拉取提供者信息如果有多个服务提供者,消费者该如何选择?服务消费者利用负载均衡算法,从服务列表中挑选一个消费者如何感知服务提供者健康状态?服务提供者会每隔30秒向EurekaServer
2022-03-27 14:41:41
526
原创 第一节:微服务介绍和项目搭建
学习资料来源于视频:https://www.bilibili.com/video/BV1LQ4y127n4微服务技术对比DubboSpringCloudSpringCloudAlibaba注册中心zookeeper、RedisEureka、ConsulNacos、Eureka服务远程调用Dubbo协议Feign(http协议)Dubbo、Feign配置中心无SpringCloudConfigSpringCloudConfig、Nacos服务网
2022-03-26 17:45:03
1355
原创 Java程序员的重启人生-5.毒丹-选择排序丹
“少爷,夫人让你先别进去,里面有官兵”,秀儿神色焦急。”别急,你先告诉我怎么回事“原来,这些人是来收取赋税的,这本来是很正常的一件事,但这些人趁着族长带人去山中狩猎,尽然要收平时两倍的税。幽尚所在这座小城属于楚国的边缘,山高皇帝远,这些人越来越肆无忌惮了。但族内怎么会心甘情愿交出冒着生命危险赚的钱,双方便僵持了起来。“别怕,你先在这等着,我倒要看看这帮扯着虎皮的狗东西有多嚣张”。幽族大院里,数百精兵,将族人围的水泄不通,一
2022-03-25 22:59:57
272
原创 你知道Mysql如何保证主备一致吗?
大家都知道Mysql的binlog可以用来存档,也可以用来主备同步。但是你知道为什么备份库执行了binlog后就可以和主库保持一致了吗?一、binlogbinlog是Mysql自带的日志,而比如redolog是Innodb引擎实现的。搜索引擎是插件的形式集成进入Mysql的。1.写入过程binlog在事务的执行过程中,先写入binlog_cache,然后再事务提交的时候,一次性写入binlog日志文件中。因为binlog是逻辑日志,记录的是一个个的执行逻辑(一条条sql语句或者是行记录从
2022-03-24 18:14:18
1360
原创 Java程序员的重启人生-4.File空间戒指
幽尚的第一已经拿到了,后续的比试已经没他什么事了,只等结束后领取奖励。饭后给胖子理解了下心法,被惊为天人,非要和幽尚促膝长谈,鉴于他表情过于猥琐,被幽尚一脚踹了出去。一切作准妥当,“接下来先将实力提升到入门三级圆满,等过几日再突破,应该不算过快。”盘腿做好,开始将周围的灵气缓缓纳入体内。修炼没多会,听到窗外真的有细微的声响,“秀儿,进来,我知道你在外面。”果然没猜错,门被轻轻的推开,年级与自己相仿的少女胆怯的站在了面前。之前没注意,现在这么一看,虽然年级比较小,但是小脸还是很精致,以后绝对是个美
2022-03-23 11:43:25
6116
23
原创 Java程序员的重启人生-3.Java基础碾压
完美级的冒泡排序丹药在体内化开,与之前的丹药相比,简直就是几何倍数的差异,半个时辰的时间,受的伤就全部恢复了。幽尚的父母本来不打算让他参加第二天的比试了,没想到这么快就恢复了,只当是那老者的丹药神奇,也没多问。接下来的事就是接着提升实力了,一步步迈向人生巅峰。”权利、金钱、美女,我来了,哈哈哈。。。“”少爷你没事吧?要不要我去找夫人?“,门外路过的秀儿听到了痴笑声,有些担心。幽尚赶紧擦了擦口水,”没事,秀儿,你退下吧,本少爷要开始练功了。“”先定个小目标,族内比试第一“,幽尚再次翻开
2022-03-20 17:35:05
7792
23
原创 《剑指Offer》美团实习第一面(附答案)
2022面经,建议先收藏起来!保证用的到1.Mysql隔离级别说一下答:一共有4种隔离级别,分别是未提交读(Read Uncommitted)、提交读(Read Committed)、可重复度(Repeatable Read)和可串行化(Serializable)。未提交读级别下,所有事务都可以看到其他未提交事务的执行结果,也就是可以读取未提交的数据,会造成脏读。提交读级别下,一个事务只能读取到已经提交事务修改的数据,解决了脏读问题,但是会有不可重复读的问题。不可重复读说的是,比如A事务中读
2022-03-19 15:05:54
1740
21
原创 Spring源码阅读之PropertySources
试问,一篇文章一半的字不认识,你能理解讲了什么故事吗?Spring中大部分的类你都陌生,你能读懂?顶多是死记硬背罢了!本文带你了解Spring中的存储属性资源的类-PropertySources最佳打开方式:自己一边手动翻看源码,一边对照阅读。文章中粘出的代码都很容易,慢慢啃,绝对有收获!一、PropertySources...
2022-03-13 16:27:37
1084
4
原创 Spring源码阅读之PropertySource
试问,一篇文章一半的字不认识,你能理解讲了什么故事吗?Spring中大部分的类你都陌生,你能读懂,顶多是死记硬背罢了!本文带你了解Spring中的存储键值对资源的类-PropertySource一、PropertySourcepublic abstract class PropertySource<T> { protected final String name; protected final T source; public String getName() {
2022-03-12 22:59:43
917
23
原创 Spring源码必备-@Order排序详解
大家都知道Spring中可以使用@Order和@Priority来决定SpringBean的启动顺序,但是你知道他是怎么实现的吗?下面我们就来看看Spring是怎么设计实现的。一、如何使用我们先看看Spring是如何使用的,然后再深入内部去看。public class SpringApplication { private <T> Collection<T> getSpringFactoriesInstances(Class<T> type, Clas
2022-03-06 18:36:29
2711
10
原创 读Spring源码必备-资源访问
面试的时候,你肯定被问过,Spring的初始化过程、或者Bean的生命周。我相信大部分人都是死记硬背的,真正能自己读懂代码而说出整个过程的人寥寥无几。造成这种局面的原因,尝试阅读Spring源码的人肯定深有感触,代码量是一部分原因,还有就是里面的各种抽象的接口,如果没有人或者书的指点,你很难知道它是起什么作用。不是我们的能力不行,而是方法不对。就像我们工作中,对于别人写的代码让你直接去阅读,没有当事人的帮助,那绝对是很痛苦的一件事,不论你的技术有多牛。如下图所示,
2022-03-05 19:48:13
188
1
原创 详解SpringBoot事件监听《SpringBoot-02》
SpringBoot有很多的evnet(事件),比如:ApplicationStartingEvent、ApplicationEnvironmentPreparedEven、ApplicationContextInitializedEvent、ApplicationPreparedEvent、ApplicationStartedEvent等。这些事件会在Spring启动的不同节点触发,我们可以通过监听器来监听这些时间,从而再不同的节点做一些业务逻辑。大家通常都使用@Component或者@Bean来
2022-03-01 18:33:42
274
原创 一文说清SpringBoot项目各个文件作用《SpringBoot-01》
一、新建项目我们先新建一个项目,看看都有哪些文件和目录二、最外层文件我们先看最外层的文件1、.gitignore文件现在大多数应用都是使用Git作为代码版本控制系统,该文件定义了最常见的文件或目录的版本控制忽略名单,包括基于Eclipse的STS(Spring Tool Suite)、IDEA和NetBeans等项目元信息资源:HELP.mdtarget/!.mvn/wrapper/maven-wrapper.jar!**/src/main/**/target/!**/
2022-02-26 16:29:49
2721
原创 10 SpringSecurity-跨域请求伪造(CSRF)的防护
一、CSRFCSRF的全称是(Cross Site Request Forgery),可译为跨域请求伪造,是一种利用用户带登录 态的cookie进行安全操作的攻击方式。CSRF实际上并不难防,但常常被系统开发者忽略,从而埋下巨 大的安全隐患。二、攻击过程举个例子,假设你登录了邮箱,正常情况下可以通过某个链接http:xx.mail.com/send可以发送邮件。此时你又访问了别的网站,网站中有黄色广告,点击后广告会请求http:xx.mail.com/send。此时相当于在盗版网站中调用了发送邮
2022-02-22 19:56:09
3626
原创 JVM必备知识点
一、synchronized工作原理修饰普通方法,锁住的是当前对象的实例修饰静态方法,锁住的是当前Class对象修饰代码块,锁住的是括号里的对象原理:是基于监视器锁实现的,使用monitorenter和monitorexit指令完成。monitorenter编译成字节码后插入到同步代码块的开始位置,monitorexit插入到方法结束处和异常处。一个线程开始会执行monitorenter指令尝试获得监视器锁的所有权。获得后,监视器进入数为1,并记录线程的所有者为当前线程,其他线程阻塞
2022-02-20 22:33:49
143
原创 09 SpringSecurity-跨域与CORS
一、认识跨域很多人误认为资源跨域时无法请求,通常情况下时可以正常发起的(部分浏览器存在特例),后端也进行了正常处理,只是在返回时被浏览器拦截,导致响应内容无法使用。可以论证这一点的著名案例就是CSRF跨站攻击。CSRF跨站攻击CSRF(Cross Site Request Forgery) 跨站请求伪造。也被称为One Click Attack和Session Riding,通常缩写为CSRF或XSRF。通常来说就是攻击者盗用你的身份,以你的名义发送恶意请求。注意这是真实的攻击手段:举
2022-02-17 12:09:03
4447
原创 08 SpringSecurity-密码加密
文章配套代码:https://gitee.com/lookoutthebush/spring-security-demo一、SpringSecurity加密机制Spring Security内置了密码加密机制,只需使用一个PasswordEncoder接口即可public interface PasswordEncoder { String encode(CharSequence rawPassword); boolean matches(CharSequence rawPa
2022-02-11 11:42:38
3244
1
原创 07 SpringSecurity-会话管理
再2个浏览器中用同一个账号登录就会发现,到现在为止,系统还没有任何会话并发限制。一个账号能多处同时登录不是一个好的策略。一、理解会话会话(session)就是无状态的 HTTP 实现用户状态可维持的一种解决方案。HTTP 本身的无状态 使得用户在与服务器的交互过程中,每个请求之间都没有关联性。这意味着用户的访问没有身份记 录,站点也无法为用户提供个性化的服务。session的诞生解决了这个难题,服务器通过与用户约定每 个请求都携带一个id类的信息,从而让不同请求之间有了关联,而id又可以很方便地绑定
2022-02-09 12:04:27
1640
原创 06 SpringSecurity-注销登录功能
退出登录和登录很类似,我们也是修改配置,指定退出登录请求的URL,用户通过访问该路由可以安全地注销其登录状态,包括使 HttpSession失效、清空已配置的Remember-me验证,以及清空SecurityContextHolder,并在注销成功之 后重定向到/login?logout页面。 如有必要,还可以重新配置。一、修改配置类logoutUrl:退出登录功能前端请求的URL。(SpringSecurity实现服务端逻辑)logoutSuccessUrl: 退出登录后要跳转的URL(
2022-01-20 11:17:55
1232
原创 05 SpringSecurity-实现自动登录
文章配套代码:https://gitee.com/lookoutthebush/spring-security-demo自动登录是将用户的登录信息保存在用户浏览器的cookie中,当用户下次访问时,自动实现校验 并建立登录态的一种机制。Spring Security提供了两种非常好的令牌:用散列算法加密用户必要的登录信息并生成令牌。 数据库等持久性数据存储机制用的持久化令牌。散列算法在Spring Security中是通过加密几个关键信息实现的:hashInfo = md5Hex(us
2022-01-19 18:28:43
2638
原创 04 SpringSecurity实现图形验证码
在验证用户名和密码前,引入辅助验证可有效防范暴力试错,图形验证码就是简单且行有效的一种辅助验证方式。一、使用过滤器实现1.SpringSecurity的过滤器之前的配置: @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() //以下资源允许访问 .antM
2022-01-17 17:18:26
2208
原创 03 SpringSecurity-认证与授权
文章配套代码:https://gitee.com/lookoutthebush/spring-security-demo上一章中使用的是默认的安全机制,仅有一个用户,一种角色。实际开发中,我们有很多用户,很多的角色,本章来实现多用户授权。一、资源准备假设我们有2中角色,一种是管理员,有后台操作权限,一种是普通用户,有网站的访问权限。1 新建controller新建2个controller,AdminController和UserController。AdminController中是后台管理员的相
2022-01-14 14:34:11
2601
原创 02 SpringSecurity-表单认证
一、创建配置类1.创建configuration包,新建一个WebSecurityConfig类,使其继承WebSecurityConfigurerAdapter2.添加@EnableWebSecurity注解,让Spring发现并注入3.可以看到WebSecurityConfigurerAdapter已经默认声明了一些安全特性 protected void configure(HttpSecurity http) throws Exception { this.logger.de
2022-01-13 16:20:02
360
原创 01 SpringSecurity项目搭建
Spring Security 的前身是 Acegi Security,在被收纳为Spring子项目后正式更名为Spring Security。现在Spring Security已经升级到5.6.1.RELEASE版本,加入了原生OAuth2.0框架。(OAuth2具体概念自己搜索)一、创建一个简单的SpringSecurity项目1.创建项目选择Spring Initializr,项目名SpringSecurityDemo, Jdk82.选择依赖SpringBoot2.6.2版
2022-01-12 18:41:52
476
2
TA创建的收藏夹 TA关注的收藏夹
TA关注的人