【Spring Boot 8,京东数科Java面试

(3)透明的GZIP缩小了下载大小

(4)响应缓存可以完全避免网络重复请求

2、GitHub OAuth APP


OAuth是一种授权机制,数据的所有者告诉系统,同一授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌token,用来代替密码,供第三方使用。

二、API

=====

https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/

三、OkHTTP实现GitHub第三方登录

=====================

四、Maven

========


<dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-thymeleaf</artifactId>

    </dependency>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-web</artifactId>

    </dependency>

 

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-devtools</artifactId>

        <scope>runtime</scope>

        <optional>true</optional>

    </dependency>

 

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-test</artifactId>

        <scope>test</scope>

        <exclusions>

            <exclusion>

                <groupId>org.junit.vintage</groupId>

                <artifactId>junit-vintage-engine</artifactId>

            </exclusion>

        </exclusions>

    </dependency>

 

    <!--HTTPClient-->

    <dependency>

        <groupId>com.squareup.okhttp3</groupId>

        <artifactId>okhttp</artifactId>

        <version>4.3.1</version>

    </dependency>

    <dependency>

        <groupId>com.squareup.okhttp3</groupId>

        <artifactId>mockwebserver</artifactId>

        <version>4.3.1</version>

    </dependency>

    <!--JSON-->

    <dependency>

        <groupId>com.alibaba</groupId>

        <artifactId>fastjson</artifactId>

        <version>1.2.58</version>

    </dependency>

</dependencies>

五、代码实例

=======

1、application.properties



server.port=8080

 

github.client.id=27dda83xxxxxx36043d4

github.client.secret=01f948axxxxxxef10d9132cfe6083dxxxxxx5f3503

github.redirect.uri=http://localhost:8080/callback

2、GitHubProvider.java



package life.majiang.community.provider;

 

import life.majiang.community.dto.AccessTokenDTO;

import life.majiang.community.dto.GitHubUser;

import com.alibaba.fastjson.JSON;

import okhttp3.*;

import org.springframework.stereotype.Component;

 

import java.io.IOException;

 

@Component

public class GitHubProvider {

    private static final MediaType MediaType_JSON

            = MediaType.get("application/json; charset=utf-8");

    public String getAccessToken(AccessTokenDTO accessTokenDTO){

 

        OkHttpClient client = new OkHttpClient();

        RequestBody body = RequestBody.create(JSON.toJSONString(accessTokenDTO), MediaType_JSON);

        Request request = new Request.Builder()

                .url("https://github.com/login/oauth/access_token")

                .post(body)

                .build();

        try (Response response = client.newCall(request).execute()) {

            String resstring = response.body().string();

            String token =resstring.split("&")[0]

                    .split("=")[1];

            return token;

        }catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }

    public GitHubUser getUser(String AccessToken){

        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()

                .url("https://api.github.com/user?access_token="+AccessToken)

                .build();

        try{

            Response response = client.newCall(request).execute();

            String res = response.body().string();

            GitHubUser gitHubUser = JSON.parseObject(res, GitHubUser.class);

            return gitHubUser;

        } catch (IOException e) {

            e.printStackTrace();

        }

        return null;

    }

}

3、AuthorizeController.java



package life.majiang.community.controller;

 

 

import life.majiang.community.dto.AccessTokenDTO;

import life.majiang.community.dto.GitHubUser;

import life.majiang.community.provider.GitHubProvider;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestParam;



### 总目录展示

该笔记共八个节点(由浅入深),分为三大模块。

**高性能**。 秒杀涉及大量的并发读和并发写,因此支持高并发访问这点非常关键。该笔记将从设计数据的动静分离方案、热点的发现与隔离、请求的削峰与分层过滤、服务端的极致优化这4个方面重点介绍。

**一致性**。 秒杀中商品减库存的实现方式同样关键。可想而知,有限数量的商品在同一时刻被很多倍的请求同时来减库存,减库存又分为“拍下减库存”“付款减库存”以及预扣等几种,在大并发更新的过程中都要保证数据的准确性,其难度可想而知。因此,将用一个节点来专门讲解如何设计秒杀减库存方案。

**高可用**。 虽然介绍了很多极致的优化思路,但现实中总难免出现一些我们考虑不到的情况,所以要保证系统的高可用和正确性,还要设计一个PlanB来兜底,以便在最坏情况发生时仍然能够从容应对。笔记的最后,将带你思考可以从哪些环节来设计兜底方案。

-----

篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),觉得有需要的码友们,麻烦各位转发一下(可以帮助更多的人看到哟!)[点这里,即可获得免费下载的方式!!](https://codechina.csdn.net/m0_60958482/java-p7)

![](https://img-blog.csdnimg.cn/img_convert/d6e24d50a5a121c9a17fcb8b1a5352ba.png)

![](https://img-blog.csdnimg.cn/img_convert/2ca53856bbc8104911d85f37d074cf3f.png)

由于内容太多,这里只截取部分的内容。需要这份《高并发秒杀顶级教程》的小伙伴,麻烦各位帮忙点赞分享支持一下(可以帮助更多的人看到哟!)
最后,将带你思考可以从哪些环节来设计兜底方案。

-----

篇幅有限,无法一个模块一个模块详细的展示(这些要点都收集在了这份《高并发秒杀顶级教程》里),觉得有需要的码友们,麻烦各位转发一下(可以帮助更多的人看到哟!)[点这里,即可获得免费下载的方式!!](https://codechina.csdn.net/m0_60958482/java-p7)

[外链图片转存中...(img-zFz5U6Iz-1629253145576)]

[外链图片转存中...(img-14mnMkyq-1629253145578)]

由于内容太多,这里只截取部分的内容。需要这份《高并发秒杀顶级教程》的小伙伴,麻烦各位帮忙点赞分享支持一下(可以帮助更多的人看到哟!)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值