当前位置:   article > 正文

一,java技术经理面试题目及答案_技术经理的面试题

技术经理的面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注Java)
img

正文

builder.setNamespace(namespace).setAppName(config.getAppname())

.setInstanceId(config.getInstanceId())

.setAppGroupName(config.getAppGroupName())

.setDataCenterInfo(config.getDataCenterInfo())

.setIPAddr(config.getIpAddress()).setHostName(config.getHostName(false))

.setPort(config.getNonSecurePort())

.enablePort(InstanceInfo.PortType.UNSECURE,

config.isNonSecurePortEnabled())

.setSecurePort(config.getSecurePort())

.enablePort(InstanceInfo.PortType.SECURE, config.getSecurePortEnabled())

.setVIPAddress(config.getVirtualHostName())

.setSecureVIPAddress(config.getSecureVirtualHostName())

.setHomePageUrl(config.getHomePageUrlPath(), config.getHomePageUrl())

.setStatusPageUrl(config.getStatusPageUrlPath(),

config.getStatusPageUrl())

.setHealthCheckUrls(config.getHealthCheckUrlPath(),

config.getHealthCheckUrl(), config.getSecureHealthCheckUrl())

.setASGName(config.getASGName());

…省略…

//添加元数据信息

// Add any user-specific metadata information

for (Map.Entry<String, String> mapEntry : config.getMetadataMap().entrySet()) {

String key = mapEntry.getKey();

String value = mapEntry.getValue();

// only add the metadata if the value is present

if (value != null && !value.isEmpty()) {

builder.add(key, value);

}

}

//构建服务注册实例对象

InstanceInfo instanceInfo = builder.build();

//设置服务租约对象

instanceInfo.setLeaseInfo(leaseInfoBuilder.build());

return instanceInfo;

这里创建了2个对象

  • 通过InstanceInfo.Builder 构建 InstanceInfo

  • 通过LeaseInfo.Builder 构建LeaseInfo

2.2.com.netflix.appinfo.LeaseInfo

该对象用来描述服务的续约信息,比如约定的心跳周期,租约有效期,最近一次续约时间等,也是通过InstanceInfoFactory.create来创建(见上面)源码如下

@JsonRootName(“leaseInfo”)

public class LeaseInfo {

public static final int DEFAULT_LEASE_RENEWAL_INTERVAL = 30;

public static final int DEFAULT_LEASE_DURATION = 90;

// Client settings

//客户端:续约间隔周期时间 30/s 心跳机制

private int renewalIntervalInSecs = DEFAULT_LEASE_RENEWAL_INTERVAL;

//客户端:续约有效时长超过 90s续约失败(服务端会剔除该实例)

private int durationInSecs = DEFAULT_LEASE_DURATION;

// Server populated

//服务端: 服务端设置该租约第一次续约时间

private long registrationTimestamp;

//服务端: 服务端设置该租约最后一次续约时间

private long lastRenewalTimestamp;

//服务端: 服务端设置该租约被剔除时间

private long evictionTimestamp;

//服务端: 服务端设置该服务上线 up 时间

private long serviceUpTimestamp;

这些参数用来维持续约心跳,心跳周期,续约有效期,最近一次续约时间,最后一次续约时间

2.3.org.springframework.cloud.client.ServiceInstance

服务发现的抽象接口,约定了服务发现的实例应用有哪些通用的信息,是spring cloud对service discovery的实例信息的抽象接口,该接口可以适配多种注册中心如:Eureka,Zookepper,Consul ,源码如下

/**

  • Represents an instance of a Service in a Discovery System

  • @author Spencer Gibb

*/

public interface ServiceInstance {

/**

服务ID

  • @return the service id as registered.

*/

String getServiceId();

/**

服务主机

  • @return the hostname of the registered ServiceInstance

*/

String getHost();

/**

服务端口

  • @return the port of the registered ServiceInstance

*/

int getPort();

/**

是否开启https

  • @return if the port of the registered ServiceInstance is https or not

*/

boolean isSecure();

/**

服务的URI地址

  • @return the service uri address

*/

URI getUri();

/**

实例的元数据信息

  • @return the key value pair metadata associated with the service instance

*/

Map<String, String> getMetadata();

/**

  • @return the scheme of the instance

*/

default String getScheme() {

return null;

}

}

2.4.com.netflix.appinfo.InstanceInfo.InstanceStatus

用来表示服务实例的状态,状态有:UP上线,DOWN下线,STARTING运行中,OUT_OF_SERVICE下线,UNKNOWN未知

@ProvidedBy(EurekaConfigBasedInstanceInfoProvider.class)

@Serializer(“com.netflix.discovery.converters.EntityBodyConverter”)

@XStreamAlias(“instance”)

@JsonRootName(“instance”)

public class InstanceInfo {

…省略…

public enum InstanceStatus {

UP, // Ready to receive traffic

DOWN, // Do not send traffic- healthcheck callback failed

STARTING, // Just about starting- initializations to be done - do not

// send traffic

OUT_OF_SERVICE, // Intentionally shutdown for traffic

UNKNOWN;

public static InstanceStatus toEnum(String s) {

if (s != null) {

try {

return InstanceStatus.valueOf(s.toUpperCase());

} catch (IllegalArgumentException e) {

// ignore and fall through to unknown

logger.debug(“illegal argument supplied to InstanceStatus.valueOf: {}, defaulting to {}”, s, UNKNOWN);

}

}

return UNKNOWN;

}

}

2.5.com.netflix.discovery.shared.Application

Application : 一个Application代表一个应用,里面包含了应用实例列表,即:包含了多个InstanceInfo实例,源码如下

/**

包含了应用实例列表

  • The application class holds the list of instances for a particular

  • application.

  • @author Karthik Ranganathan

*/

@Serializer(“com.netflix.discovery.converters.EntityBodyConverter”)

@XStreamAlias(“application”)

@JsonRootName(“application”)

public class Application {

private static Random shuffleRandom = new Random();

private String name;

@XStreamOmitField

private volatile boolean isDirty = false;

@XStreamImplicit

private final Set instances;

//无序状态实例列表

private final AtomicReference<List> shuffledInstances;

//map缓存服务ID 对应 实例关系

private final Map<String, InstanceInfo> instancesMap;

…省略…

/**

翻译:添加实例信息

  • Add the given instance info the list.

  • @param i

  •        the instance info object to be added.
    
    • 1

*/

public void addInstance(InstanceInfo i) {

instancesMap.put(i.getId(), i);

synchronized (instances) {

instances.remove(i);

instances.add(i);

isDirty = true;

}

}

/**

翻译:移出实例信息

  • Remove the given instance info the list.

  • @param i

  •        the instance info object to be removed.
    
    • 1

*/

public void removeInstance(InstanceInfo i) {

removeInstance(i, true);

}

/**

翻译:获取实例信息列表

  • Gets the list of instances associated with this particular application.

  • Note that the instances are always returned with random order after

  • shuffling to avoid traffic to the same instances during startup. The

  • shuffling always happens once after every fetch cycle as specified in

  • {@link EurekaClientConfig#getRegistryFetchIntervalSeconds}.

  • @return the list of shuffled instances associated with this application.

*/

@JsonProperty(“instance”)

public List getInstances() {

return Optional.ofNullable(shuffledInstances.get()).orElseGet(this::getInstancesAsIsFromEureka);

}

/**

通过id获取实例信息

  • Get the instance info that matches the given id.

  • @param id

  •        the id for which the instance info needs to be returned.
    
    • 1
  • @return the instance info object.

*/

public InstanceInfo getByInstanceId(String id) {

return instancesMap.get(id);

}

…省略…

该类中还提供了一些列方法:

  • void addInstance(InstanceInfo i 添加实例,

  • void removeInstance(InstanceInfo i) 移出实例,

  • List<InstanceInfo> getInstances() 获取实例列表,

  • InstanceInfo getByInstanceId(String id) 通过id获取实例

2.6.com.netflix.discovery.shared.Applications

这个是服务注册列表对象,该类包装了由eureka服务器返回的所有注册表信息,源码如下:

/**

翻译:该类包装了由eureka服务器返回的所有注册表信息


  • The class that wraps all the registry information returned by eureka server.

翻译: EurekaClientConfig#getRegistryFetchIntervalSeconds() 方法从 Eureak Server获取服务注册列表,然后对服务进行过滤,

按照(EurekaClientConfig#shouldFilterOnlyUpInstances())的规则过滤上线的服务


  • Note that the registry information is fetched from eureka server as specified

  • in {@link EurekaClientConfig#getRegistryFetchIntervalSeconds()}. Once the

  • information is fetched it is shuffled and also filtered for instances with

  • {@link InstanceStatus#UP} status as specified by the configuration

  • {@link EurekaClientConfig#shouldFilterOnlyUpInstances()}.

  • @author Karthik Ranganathan

*/

@Serializer(“com.netflix.discovery.converters.EntityBodyConverter”)

@XStreamAlias(“applications”)

@JsonRootName(“applications”)

public class Applications {

private static class VipIndexSupport {

final AbstractQueue instances = new ConcurrentLinkedQueue<>();

final AtomicLong roundRobinIndex = new AtomicLong(0);

final AtomicReference<List> vipList = new AtomicReference<List>(Collections.emptyList());

public AtomicLong getRoundRobinIndex() {

return roundRobinIndex;

}

public AtomicReference<List> getVipList() {

return vipList;

}

}

private static final String STATUS_DELIMITER = “_”;

private String appsHashCode;

private Long versionDelta;

@XStreamImplicit

//注册成功的服务的集合

private final AbstractQueue applications;

//注册成功的服务的集合,名字和服务对应关系

private final Map<String, Application> appNameApplicationMap;

private final Map<String, VipIndexSupport> virtualHostNameAppMap;

private final Map<String, VipIndexSupport> secureVirtualHostNameAppMap;

/**

创建一个新的空的Eureka应用程序列表。

  • Create a new, empty Eureka application list.

*/

public Applications() {

this(null, -1L, Collections.emptyList());

}

/**

这里是把注册成功的服务实例保存起来 registeredApplications是注册成功的实例

  • Note that appsHashCode and versionDelta key names are formatted in a

  • custom/configurable way.

*/

@JsonCreator

public Applications(@JsonProperty(“appsHashCode”) String appsHashCode,

@JsonProperty(“versionDelta”) Long versionDelta,

@JsonProperty(“application”) List registeredApplications) {

this.applications = new ConcurrentLinkedQueue();

this.appNameApplicationMap = new ConcurrentHashMap<String, Application>();

this.virtualHostNameAppMap = new ConcurrentHashMap<String, VipIndexSupport>();

this.secureVirtualHostNameAppMap = new ConcurrentHashMap<String, VipIndexSupport>();

this.appsHashCode = appsHashCode;

this.versionDelta = versionDelta;

//添加到 队列中 applications 和 appNameApplicationMap map中

for (Application app : registeredApplications) {

this.addApplication(app);

}

}

…省略…

/**

添加应用

  • Add the application to the list.

  • @param app

  •        the <em>application</em> to be added.
    
    • 1

*/

public void addApplication(Application app) {

appNameApplicationMap.put(app.getName().toUpperCase(Locale.ROOT), app);

addInstancesToVIPMaps(app, this.virtualHostNameAppMap, this.secureVirtualHostNameAppMap);

applications.add(app);

}

/**

获取所有注册成功的应用

  • Gets the list of all registered applications from eureka.

  • @return list containing all applications registered with eureka.

*/

@JsonProperty(“application”)

public List getRegisteredApplications() {

return new ArrayList(this.applications);

}

/**

根据名字获取注册成功的应用

  • Gets the list of all registered applications for the given

  • application name.

  • @param appName

  •        the application name for which the result need to be fetched.
    
    • 1
  • @return the list of registered applications for the given application

  •     name.
    
    • 1

*/

public Application getRegisteredApplications(String appName) {

return appNameApplicationMap.get(appName.toUpperCase(Locale.ROOT));

}

//总共有多个个实例

public int size() {

return applications.stream().mapToInt(Application::size).sum();

}

//把应用的顺序打乱

public void shuffleInstances(boolean filterUpInstances) {

shuffleInstances(filterUpInstances, false, null, null, null);

}

该类中制定了一些应用操作方法,主要如下

  • public void addApplication(Application app):添加一个应用

  • public List<Application> getRegisteredApplications():获取所有注册的应用

  • public Application getRegisteredApplications(String appName):根据名字获取注册的应用

  • public int size() :实例总和

2.6.ApplicationInfoManager

实例管理器,在EurekaClientAutoConiguration中根据EurekaInstanceConfig和InstanceInfo创建得到ApplicationInfoManager,它的作用主要是来操作 InstanceInfo , 主要提供了对服务实例状态的设置,eureka状态改变的监听,以及instanceinfo,LeaseInfo租约信息刷新等等。

@Singleton

public class ApplicationInfoManager {

private static final Logger logger = LoggerFactory.getLogger(ApplicationInfoManager.class);

private static final InstanceStatusMapper NO_OP_MAPPER = new InstanceStatusMapper() {

@Override

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

image

上述的面试题答案都整理成文档笔记。 也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

image

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

tanceInfo , 主要提供了对服务实例状态的设置,eureka状态改变的监听,以及instanceinfo,LeaseInfo租约信息刷新`等等。

@Singleton

public class ApplicationInfoManager {

private static final Logger logger = LoggerFactory.getLogger(ApplicationInfoManager.class);

private static final InstanceStatusMapper NO_OP_MAPPER = new InstanceStatusMapper() {

@Override

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

[外链图片转存中…(img-ZSRgIi1p-1713673160360)]

上述的面试题答案都整理成文档笔记。 也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

[外链图片转存中…(img-iHX5uj2M-1713673160361)]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)
[外链图片转存中…(img-xcGbjpAE-1713673160361)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/812036
推荐阅读
相关标签
  

闽ICP备14008679号