分享好友 最新动态首页 最新动态分类 切换频道
2024年最全java版gRPC实战之一:用proto生成代码(1),java面试问题大全及答案大全基础
2024-12-26 22:28

面试难免让人焦虑不安。经历过的人都懂的。但是如果你提前预测面试官要问你的问题并想出得体的回答方式,就会容易很多。

2024年最全java版gRPC实战之一:用proto生成代码(1),java面试问题大全及答案大全基础

此外,都说“面试造火箭,工作拧螺丝”,那对于准备面试的朋友,你只需懂一个字:刷

给我刷刷刷刷,使劲儿刷刷刷刷刷!今天既是来谈面试的,那就必须得来整点面试真题,这不花了我整28天,做了份“Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法等”

且除了单纯的刷题,也得需准备一本【JAVA进阶核心知识手册】:JVM、JAVA集合、JAVA多线程并发、JAVA基础、Spring 原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、设计模式、负载均衡、数据库、一致性算法、JAVA算法、数据结构、加密算法、分布式缓存、Hadoop、Spark、Storm、YARN、机器学习、云计算,用来查漏补缺最好不过。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

核心技术

  • 为了用java发布gRPC服务,我使用的是开源库net.devh:grpc-server-spring-boot-starter

  • 在调用其他gRPC服务时用的是net.devh:grpc-client-spring-boot-starter

  • 感谢该开源库的作者Michael大神,您的智慧的简化了java程序员的gRPC开发工作,项目地址:https://github.com/yidongnan/grpc-spring-boot-starter

本篇概览

作为系列文章的开篇,本篇要做的事情如下

  1. 明确依赖库和开发环境

  2. 新建父工程grpc-tutorials,今后《java版gRPC实战》系列的所有源码都在这个工程中

  3. 实战用proto文件自动生成java代码

明确依赖库和开发环境

整个系列文章涉及的依赖库和开发环境的情况如下

  1. JDK:1.8.0_281

  2. gradle:6.7.1

  3. springboot:2.3.8.RELEASE

  4. grpc:1.35.0

  5. protobuf:3.14.0

  6. grpc-server-spring-boot-starter:2.11.0.RELEASE

  7. grpc-client-spring-boot-starter:2.11.0.RELEASE

  8. 操作系统:win10专业版

  9. IDEA:2021.1 (Ultimate Edition)

源码下载

  • 本篇实战中的完整源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos)

| 名称 | 链接 | 备注 |

| :-- | :-- | :-- |

| 项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |

| git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |

| git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |

  • 这个git项目中有多个文件夹,《java版gRPC实战》系列的源码在grpc-tutorials文件夹下,如下图红框所示

创建《java版gRPC实战》系列的父工程

  • 新建名为grpc-tutorials的gradle工程,前面提到的库及其版本都在此工程中处理好,build.gradle内容如下

import java.time.OffsetDateTime

import java.time.format.DateTimeFormatter

buildscript {

repositories {

maven {

url ‘https://plugins.gradle.org/m2/’

}

// 如果有私服就在此配置,如果没有请注释掉

maven {

url ‘http://192.168.50.43:8081/repository/aliyun-proxy/’

}

// 阿里云

maven {

url ‘http://maven.aliyun.com/nexus/content/groups/public/’

}

mavenCentral()

}

ext {

// 项目版本

projectVersion = ‘1.0-SNAPSHOT’

// 依赖库的版本

grpcSpringBootStarterVersion = ‘2.11.0.RELEASE’

// grpc版本 https://github.com/grpc/grpc-java/releases

grpcVersion = ‘1.35.0’

// protobuf版本 https://github.com/protocolbuffers/protobuf/releases

protobufVersion = ‘3.14.0’

// protobuf的gradle插件版本

protobufGradlePluginVersion = ‘0.8.12’

// sprignboot版本 https://github.com/spring-projects/spring-boot/releases

springBootVersion = ‘2.3.8.RELEASE’

// springcloud版本 https://github.com/spring-cloud/spring-cloud-release/releases

springCloudVersion = ‘Hoxton.SR9’

// nacos版本 https://github.com/alibaba/spring-cloud-alibaba/releases

springCloudAlibabaNacosVersion = ‘2.2.3.RELEASE’

// security版本 https://github.com/spring-projects/spring-security-oauth/releases

springSecurityOAuthVersion = ‘2.5.0.RELEASE’

}

}

plugins {

id ‘java’

id ‘java-library’

id ‘org.springframework.boot’ version “${springBootVersion}” apply false

id ‘io.spring.dependency-management’ version ‘1.0.11.RELEASE’

id ‘net.nemerosa.versioning’ version ‘2.14.0’

id ‘com.google.protobuf’ version ‘0.8.14’

id ‘io.franzbecker.gradle-lombok’ version ‘4.0.0’ apply false

id ‘com.github.ben-manes.versions’ version ‘0.36.0’ // gradle dependencyUpdates

}

// If you attempt to build without the parameter in it will cause a build error that it can’t find

// a buildScan property to change. This avoids that problem.

if (hasProperty(‘buildScan’)) {

buildScan {

termsOfServiceUrl = ‘https://gradle.com/terms-of-service’

termsOfServiceAgree = ‘yes’

}

}

wrapper {

gradleVersion = ‘6.7.1’

}

def buildTimeAndDate = OffsetDateTime.now()

ext {

// 构建时取得当前日期和时间

buildDate = DateTimeFormatter.ISO_LOCAL_DATE.format(buildTimeAndDate)

buildTime = DateTimeFormatter.ofPattern(‘HH:mm:ss.SSSZ’).format(buildTimeAndDate)

buildRevision = versioning.info.commit

}

allprojects {

apply plugin: ‘java’

apply plugin: ‘idea’

apply plugin: ‘eclipse’

apply plugin: ‘io.spring.dependency-management’

apply plugin: ‘io.franzbecker.gradle-lombok’

compileJava {

sourceCompatibility = JavaVersion.VERSION_1_8

targetCompatibility = JavaVersion.VERSION_1_8

options.encoding = ‘UTF-8’

}

compileJava.options*.compilerArgs = [

‘-Xlint:all’, ‘-Xlint:-processing’

]

// Copy LICENSE

tasks.withType(Jar) {

from(project.rootDir) {

include ‘LICENSE’

into ‘META-INF’

}

}

// 写入到MANIFEST.MF中的内容

jar {

manifest {

attributes(

‘Created-By’: “{System.properties[‘java.vendor’]} ${System.properties[‘java.vm.version’]})”.toString(),

‘Built-By’: ‘travis’,

‘Build-Date’: buildDate,

‘Build-Time’: buildTime,

‘Built-OS’: “${System.properties[‘os.name’]}”,

‘Build-Revision’: buildRevision,

‘Specification-Title’: project.name,

‘Specification-Version’: projectVersion,

‘Specification-Vendor’: ‘Will Zhao’,

‘Implementation-Title’: project.name,

‘Implementation-Version’: projectVersion,

‘Implementation-Vendor’: ‘Will Zhao’

)

}

}

repositories {

mavenCentral()

// 如果有私服就在此配置,如果没有请注释掉

maven {

url ‘http://192.168.50.43:8081/repository/aliyun-proxy/’

}

// 阿里云

maven {

url ‘http://maven.aliyun.com/nexus/content/groups/public/’

}

jcenter()

}

buildscript {

repositories {

maven { url ‘https://plugins.gradle.org/m2/’ }

}

}

}

allprojects { project ->

buildscript {

dependencyManagement {

imports {

mavenBom “org.springframework.boot:spring-boot-starter-parent:${springBootVersion}”

mavenBom “org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}”

mavenBom “com.google.protobuf:protobuf-bom:${protobufVersion}”

mavenBom “io.grpc:grpc-bom:${grpcVersion}”

mavenBom “org.junit:junit-bom:5.7.0”

}

dependencies {

dependency ‘org.projectlombok:lombok:1.16.16’

dependency ‘org.apache.commons:commons-lang3:3.11’

dependency ‘commons-collections:commons-collections:3.2.2’

dependency “net.devh:grpc-server-spring-boot-starter:${grpcSpringBootStarterVersion}”

dependency “net.devh:grpc-client-spring-boot-starter:${grpcSpringBootStarterVersion}”

}

}

ext {

micrometerVersion = dependencyManagement.importedProperties[‘micrometer.version’]

springFrameworkVersion = dependencyManagement.importedProperties[‘spring-framework.version’]

springSecurityVersion = dependencyManagement.importedProperties[‘spring-security.version’]

springCloudCommonsVersion = dependencyManagement.importedProperties[‘spring-cloud-commons.version’]

}

}

}

无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

[外链图片转存中…(img-FVwobnlm-1715082442656)]

[外链图片转存中…(img-X0jw6Mwk-1715082442657)]

[外链图片转存中…(img-6eb4iNAL-1715082442657)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

最新文章
竞价托管外包后效果如何保证?代运营效果保障措施全览!
在数字营销领域,竞价托管外包已成为众多企业提升广告效果、优化资源配置的重要选择。然而,如何确保外包后的竞价托管效果达到预期,成为众多企业关注的焦点。作为一名对行业有深度认知的技术人员,我将从策略规划、执行监控、团队专业性、
管家婆2024最新资料,移动\电信\联通 通用版:iPad26.53.18
  随着科技的发展和商业环境的不断变化,企业管理软件的需求日益增长。《管家婆》作为国内知名的财务管理软件,其在财务、库存、销售等领域的应用极为广泛。本文将为大家介绍《管家婆2024最新资料》,探讨其新功能、新特点,并分析其对企
江苏濠汉申请基于三维点云的输电线路单图测距专利,提高输电线路安全性
金融界2024年12月12日消息,国家知识产权局信息显示,江苏濠汉信息技术有限公司申请一项名为“基于三维点云的输电线路单图测距方法及系统”的专利,公开号 CN 119107351 A,申请日期为2024年11月。专利摘要显示,本发明公开了基于云的单图
济南企业网络曝光度提升首选——专业SEO外包服务
济南SEO外包服务,专注于为企业提供专业网络曝光提升方案。通过优化搜索引擎排名,增强企业在线影响力,助力企业高效拓展市场,提升品牌知名度。随着互联网的快速发展,越来越多的企业开始重视网络营销,希望通过网络平台拓展市场,提高品
这些残破不堪的漆器,如何回到“颜值巅峰”|文物修复
  在漫长的历史长河中,许多漆器文物面临着损坏和失真的风险。漆器修复是对这些老物件进行保护和再生的必要手段,也是对历史和文化的传承和弘扬。  华夏第一建鼓:让碎片在指尖重生  在荆州市文物保护中心,楚氏漆器修复技艺传承人杜
这些公司是2024年搜索引擎概念股龙头,收好了!(12月16日)
搜索引擎概念股有哪些?据南方财富网概念查询工具数据显示,搜索引擎概念股有:岩山科技:2024年第三季度,公司实现总营收1.45亿,同比增长4.58%,净利润为537.73万,毛利润为4669.15万。公司主要产品和服务有软件外包服务、系统集成、搜索
SEO排名点击器,揭秘流量提升的神秘工具
SEO排名点击器,一款神秘工具,助力网站快速提升流量与曝光度。通过模拟真实用户点击,优化搜索引擎排名,让网站脱颖而出,成为提升网络影响力的秘密武器。掌握此工具,轻松抢占搜索市场,吸引海量流量。在互联网时代,网站流量和曝光度成
郑州SD-091324-B智能操控装置工作原理+2025排名一览
郑州SD-091324-B智能操控装置工作原理+2025排名一览 1. 产品概述 - WSK - S-(TH)智能温湿度控制器是一种能够对环境温湿度进行精确监测和控制的设备。它结合了先进的传感器技术和智能控制算法,用于维持环境温湿度在设定的范围内。2. 功能特
百度搜索推广与蜘蛛池,解锁高效网络营销策略,百度推广蜘蛛屯
百度搜索推广与蜘蛛池是高效网络营销策略的关键组成部分。通过百度搜索推广,企业可以精准定位目标用户,提高品牌曝光率和转化率。而蜘蛛池则是一种高效的网站抓取工具,可以快速收集目标网站的信息,为推广策略提供数据支持。结合两者,企
网络爬虫违法行为的最新案例解析:丁某案件详情与刑法规制
在信息技术蓬勃发展的今天,网络爬虫技术的应用已经渗透到了我们生活的方方面面。然而,随着这种技术的普及,涉及到非法网络爬虫行为的刑事案例也开始屡见不鲜。近日,最高人民法院对一起名为《丁某提供侵入计算机信息系统程序案》进行了深
相关文章
推荐文章
发表评论
0评