Spring Cloud

字节跳动着么缺人?不卡学历,不卡经验,只要求...

て烟熏妆下的殇ゞ 提交于 2021-01-06 21:19:58
由于国内用户对电商购物的热衷,再加上这些年,商家推出的各种优惠补贴策略和高效快捷的物流,也让大家足不出门享受到了真正的实惠。 但,对于一个 java 程序员 来讲,我更关注的是 系统架构层面 ,从原本的定时秒杀,到现在的各种 活动预热、拼团、定金膨胀、百亿补贴、跨店满减、以及更复杂的组合优惠 ,让用户一时摸不到头脑,虽然扰乱了用户购买的节奏,但也一直保持着持续升温的状态。 那么从 技术层面来分析 的话,这次优惠的复杂程度会造成原本就会有的 集中式秒杀 ,变成了 持续式高并发请求 ,这让我们的技术架构更为复杂,尤其是对 后台系统 而言, 复杂的链路调用 ,更多缓存逻辑和业务叠加给程序员们增加了额外的挑战。 当然像淘宝、京东、拼多多这种体量的用户群,在双十一之前早就做好了应对方案 对于在做 二三线电商 的小伙伴或想要了解淘宝、京东内部架构的小伙伴,我总结了以下几点技术总结: 技术总结: 电商高并发系统架构,SpringCloud Alibaba是如何应对双十一 抗住淘宝双十一的三大利器:Sentinel、Nacos、RocketMQ Sentinel在淘宝双十一洪峰时限流底层实现原理 Alibaba Sentinel对比 Netflix Hystrix区别与优势 Nacos在淘宝中如何抗住百万服务注册发现与配置下发 RocketMQ在双十一秒杀时如何抗住亿级订单数据

IT人的修炼之路

99封情书 提交于 2021-01-06 12:13:18
前言 计算机技术更新迭代的速度太快了,作为ITer每天除了面对工作,就要学习新技术,自己的感觉是一直在为技术疲于奔命,直到现在,也不敢放缓脚步。程序员每天必须抽出一定时间学习新技术,避免被淘汰。 1.定位自我 对于ITer来说,我们对自己以及自己从事的工作,也应该给一个准确清晰的定位,至少你要清楚,你是一个程序员,在你拿着高薪工作的时候,你要为这份工作付出很多,包括时间、经历和金钱,最主要的是,你需要不断学习,不断更新自己的技术栈。 定位,意味着,你要认识到当前自己的优势和不足,并制定好未来的规划和技能需求,你要确定你是去大公司镀金还是去小公司独当一面,然后沿着这个方向不断学习和武装自己。 2.有效学习的步骤 第一:针对学习,不同的人的认知能力是有差距的,而不同的学科也会呈现不同的特点。就像技术更新迭代一样,人的学习过程也是一个迭代的过程,用已知的知识去认识未知世界,当两者之间有关联时,就会很快被理解并接受,否则就表现出不理解和不接受的特性。 第二:学会简化知识,让繁杂变得简洁,你的大脑将更容易理解和接受。简化让我们对学习的知识印象更深刻,人的认知也是一样,复杂的东西是不利于大脑记忆和处理的,我们认知的第一感觉,更倾向简洁的东西。所谓一图胜千言,大概说的也是这个道理。 第三:学会知识分层,将知识系统化和层次化,存储在大脑合适的位置。这样我们在对知识使用时,大脑更容易搜索到

JNPF快速开发平台-快速开发Web+APP项目的java开发平台

若如初见. 提交于 2021-01-06 10:44:56
JNPF快速开发平台 JNPF快速开发平台 采用前后端分离技术、采用B/S架构开发,形成一站式开发多端(APP+PC)使用。 JAVA版介绍 java版采用前后端分离,前端项目与后端项目是两个项目,需要独立部署,两个不同的工程,两个不同的代码库,前端通过 ajax 来调用 http 请求调用后端的 restful api。 JNPF架构体系 主体架构 JNPF快速开发平台采用前后端分离技术、采用B/S架构开发,形成一站式开发多端(APP+PC)使用, 实现统一的权限管理、灵活的接口调用、拖拽式流程搭建等操作,使用业界领先地位的研发技术体系。 JNPF开发环境 前端 Vue2.x;ElementUI;Axios;WebScoket; 后端 SpringBoot、SpringCloud、Mybatis、Maven、.NET Core3.1、Ocelot、EFCore、Nuget; 移动端 Android、IOS、微信小程序、混合应用、uniapp; 数据库 Oracle、SQLServer、MySQL; JNPF特点 拖拉、可视化设计表单 我们采用所见即所得的表单设计方式,通过简单的拖拽控件及数据绑定设置即可完成表单设计工作。因此,通过我们提供的表单设计器,您不需要专业的电脑知识,即可在几分钟内设计出非常专业的表单。设计出来的所有表单都是标准的表单,具有良好的互操作性和可扩展性

干货分享】最新 Java 后端面试系列干货,都在这了!

爷,独闯天下 提交于 2021-01-05 16:46:38
本仓库【Java Github 超硬核面试 “备战” 手册】整理过程中更加偏重实战方向,整理中我也会分享一些近些年自己开发和工作过程中的一些感悟、心得和无奈。 本仓库大部分内容来自我近几年的收集和整理,整体文章思路也是围绕着【面试备战计划】来进行整理的,主体内容包含:职业规划篇,跳槽篇,实操篇,一线大厂面试题篇,以及高频面试必备综合篇 等知识内容。 总归一句话:养成一颗奋发的平常心。 目录 程序员职业规划篇 职业分析及定位 职业生涯经验和建议 跳槽篇 跳槽是为了什么?不为什么? 什么时间 / 状态下跳槽最合适? 跳槽的节奏和路线图应该是怎样的? 造成面试不通过的核心原因,有哪些? 良好的心态和体态 实操篇 求职简历应该如何写? 怎么“高效”寻找求职渠道? 面试准备及总结 900份简历模板 BATJ一线大厂面试题篇 百度面试篇 腾讯面试篇 京东面试篇 头条面试篇 美团面试篇 华为面试篇 滴滴面试篇 互联网公司高频面试必备综合篇 并发编程面试题汇总 JVM面试题汇总 Netty常被问到的那些面试题汇总 Tomcat面试题整理汇总 Mysql面试题汇总 Spring源码深度解析 Mybatis常见面试题汇总 Nginx那些面试题汇总 Zookeeper面试题汇总 RabbitMQ常见面试题汇总 Kafka面试题汇总 Redis常见面试题汇总 Dubbo面试题 SpringBoot

面试官:不会看 Explain执行计划,简历敢写 SQL 优化?

我们两清 提交于 2021-01-05 07:32:50
转自: 程序员内点事 作者: 程序员内点事 昨天中午在食堂,和部门的技术大牛们坐在一桌吃饭,作为一个卑微技术渣仔默默的吃着饭,听大佬们高谈阔论,研究各种高端技术,我TM也想说话可实在插不上嘴。 聊着聊着突然说到他上午面试了一个工作6年的程序员,表情挺复杂,他说:我看他简历写着熟悉 SQL 语句调优,就问了下 Explain 执行计划怎么看?结果这老哥一问三不知,工作6年这么基础的东西都不了解! 感受到了大佬的王之鄙视,回到工位我就开始默默写这个,哎~ 我TM也不太懂 Explain ,老哥你这是针对我啊!哭唧唧~ Explain有什么用 当 Explain 与 SQL 语句一起使用时, MySQL 会显示来自优化器关于SQL执行的信息。也就是说, MySQL 解释了它将如何处理该语句,包括如何连接表以及什么顺序连接表等。 表的加载顺序 sql 的查询类型 可能用到哪些索引,哪些索引又被实际使用 表与表之间的引用关系 一个表中有多少行被优化器查询 ..... Explain有哪些信息 Explain 执行计划包含字段信息如下:分别是 id 、 select_type 、 table 、 partitions 、 type 、 possible_keys 、 key 、 key_len 、 ref 、 rows 、 filtered 、 Extra 12个字段。 下边我们会结合具体的

Dubbo面试题(2020最新版)

不问归期 提交于 2021-01-05 01:42:02
基础知识 为什么要用 Dubbo? 随着服务化的进一步发展,服务越来越多,服务之间的调用和依赖关系也越来越复杂,诞生了面向服务的架构体系(SOA),也因此衍生出了一系列相应的技术,如对服务提供、服务调用、连接处理、通信协议、序列化方式、服务发现、服务路由、日志输出等行为进行封装的服务框架。就这样为分布式系统的服务治理框架就出现了,Dubbo 也就这样产生了。 Dubbo 是什么? Dubbo 是一款高性能、轻量级的开源 RPC 框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。 Dubbo 的使用场景有哪些? 透明化的远程方法调用:就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。 软负载均衡及容错机制:可在内网替代 F5 等硬件负载均衡器,降低成本,减少单点。 服务自动注册与发现:不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。 Dubbo 核心功能有哪些? Remoting:网络通信框架,提供对多种NIO框架抽象封装,包括“同步转异步”和“请求-响应”模式的信息交换方式。 Cluster:服务框架,提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。 Registry:服务注册,基于注册中心目录服务

深入理解Java引用类型

坚强是说给别人听的谎言 提交于 2021-01-04 14:45:51
在Java中类型可分为两大类:值类型与引用类型 值类型就是基本数据类型(如int ,double 等),而引用类型,是指除了基本的变量类型之外的所有类型(如通过 class 定义的类型)。所有的类型在内存中都会分配一定的存储空间(形参在使用的时候也会分配存储空间,方法调用完成之后,这块存储空间自动消失), 基本的变量类型只有一块存储空间(分配在stack中), 而引用类型有两块存储空间(一块在stack中,一块在heap中),在函数调用时Java是传值还是传引用,这个估计很多人至今都很糊涂,下面用图形与代码来解释:   在上图中引用类型在传参时不是在heap中再分配一块内存来存变量c 所指向的A(),而是让a 指向同一个A 的实例,这就与C++ 中的指针一样,先声明指针变量a,b,c,d 在传参的时候让a 指向c所指向的内存,让 d 指向 b 所指向的内存。很明显Java中的引用与C++中的指针在原理上是相类似的,但记住Java没有指针,只有引用。下面再通过一些具体的代码来讨论引用: 1. 简单类型是按值传递的 Java 方法的参数是简单类型的时候,是按值传递的 (pass by value)。这一点我们可以通过一个简单的例子来说明: package test; public class Test { //交换两个变量的值 public static void Swap(int a

Go 并发基础

二次信任 提交于 2021-01-04 11:58:14
协程(Goroutine) 我们知道 Go 中,存在一个 defer 关键字用于修饰一个函数或者方法,使得该函数或者方法在返回前才会执行,也就说被延迟执行,但又一定会执行。但其实 Go 中也存在类似的异步,或者说多线程的概念,但在 Go 中不叫作线程,而是叫协程。 协程相对于线程来说,是一个非常轻量级的东西,它在一个程序中,可以启动很多个。协程也称为 goroutine。goroutine 被 Go runtime 所调度,这一点和线程不一样。也就是说,Go 语言的并发是由 Go 自己所调度的,自己决定同时执行多少个 goroutine,什么时候执行哪几个。这些对于我们开发者来说很透明,只需要在编码的时候告诉 Go 语言要启动几个 goroutine,至于如何调度执行,我们不用关心。 启动一个 goroutine 简单,Go 语言为我们提供了 go 关键字,相比其他编程语言简化了很多,如代码: func main () { go fmt.Println( "码疯窝在香嗝喱辣" ) fmt.Println( "I am main goroutine" ) time.Sleep(time.Second) } 这样就启动了一个 goroutine,用来调用 fmt.Println 函数,打印"码疯窝在香嗝喱辣",所以这段代码里,其实有两个 goroutine,一个是 main 函数启动的

Spring Cloud 之 Feign 使用HTTP请求远程服务

余生长醉 提交于 2021-01-04 04:04:02
  Feign是从Netflix中分离出来的轻量级项目,能够在类接口上添加注释,成为一个REST API 客户端,Feign默认集成了Ribbon。   Feign中对 Hystrix 有依赖关系。Feign只是一个便利的rest框架,简化调用,最后还是通过ribbon在注册服务器中找到服务实例,然后对请求进行分配   Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP请求。 一、使用方式   1、首先写好需要注册进注册中心的服务接口UserServiceController,该接口相当于service层,只是以RestFULL接口的形式供远程调用 @RestController @RequestMapping( "userService" ) public class UserServiceController { @GetMapping( "getUser/{userId}" ) public User getUser(@PathVariable("userId" ) String userId){ System.out.println( "获取User,更具UserId,查询User-->" + userId

Spring Cloud Config 加密和解密

感情迁移 提交于 2021-01-03 21:35:49
要使用加密和解密功能,您需要在JVM中安装全面的JCE(默认情况下不存在)。您可以从Oracle下载“Java加密扩展(JCE)无限强度管理策略文件”,并按照安装说明(实际上将JRE lib / security目录中的2个策略文件替换为您下载的文件)。 如果远程属性源包含加密内容(以 {cipher} 开头的值),则在通过HTTP发送到客户端之前,它们将被解密。这种设置的主要优点是,当它们“静止”时,属性值不必是纯文本(例如在git仓库中)。如果值无法解密,则从属性源中删除该值,并添加具有相同键的附加属性,但以“无效”作为前缀。和“不适用”的值(通常为“<n / a>”)。这主要是为了防止密码被用作密码并意外泄漏。 如果要为config客户端应用程序设置远程配置存储库,可能会包含一个 application.yml ,例如: application.yml spring: datasource: username: dbuser password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ' properties文件中的加密值不能用引号括起来,否则不会解密该值: application.properties spring.datasource.username: dbuser spring.datasource.password: {cipher