面试日记3

1.sofa项目结构,层级依赖?

sofa是支付宝的核心框架,目前开发环境框架已经升级到sofa4,sofa的核心是spring,测试这边的接口测试用着是ats核心是testng,ats为sofa服务者,下面大致讲下sofa框架的结构和特色!

sofa分:biz层即业务层,core层俗称核心层,web层即展现层,common层也称数据层,test测试层。业务层的biz-service发布服务,打成jar包的方式供其他facade调用,引用服务在调数据层,如附件图

每个模块有自己独立的spring上下文。 各模块spring上下文隔离。 模块之间的服务调用,通过向sofa容器注册/引用服务完成。

可以在sofa中发布一个内部服务 可以在跨bundle引用其他bundle的内部服务 可以发布一个外部服务(ws、tr) 可以引用外部系统发布的服务(ws、tr) 理解软负载和统一服务模型 将springbean发不成jvm类型的sofa服务

<!-- spring bean声明 -->

<bean id="userService" class="com.alipay.yanyu.core.service.user.impl.UserServiceImpl" init-method="init"/>

<!-- 发布jvm服务:以接口作为服务的唯一标示符 -->

<sofa:service ref="userService" interface="com.alipay.yanyu.core.service.user.UserService" />

其他地方引用服务

<!-- 服务引入声明:以接口来查询服务 -->

<sofa:reference id="userService" interface="com.alipay.yanyu.core.service.user.UserService" />

<!-- 带uniqueId的服务发布 -->

<sofa:service ref="userService" interface="com.alipay.yanyu.core.service.user.UserService" uniqueId="uniqueId1" />

<!-- 带uniqueId的服务引用 -->

<sofa:reference id="userService" interface="com.alipay.yanyu.core.service.user.UserService" uniqueId="uniqueId1" />

rpc服务发布 <bean id="userFacade" class="com.alipay.yanyu.biz.service.impl.UserFacadeImpl" />

<!-- 发布rpc服务 -->

<sofa:service ref="userFacade" interface="com.alipay.yanyu.common.service.facade.UserFacade" >

<!-- 增加ws绑定 -->

<sofa:binding.ws />
</sofa:service>

rpc服务引用 <sofa:reference id="userFacade" interface="com.alipay.yanyu.common.service.facade.UserFacade"> <sofa:binding.ws /> </sofa:reference>

服务发布: 默认绑定:sofa:binding/ 跨JVM绑定:sofa:binding.ws/、sofa:binding.tr/ 服务引用: 职能声明一种绑定

不同bundle之间的引用和依赖通过pom.xml文件加入依赖 jar包引用 <dependency> <groupId>com.alipay.sofa.runtime</groupId> <artifactId>sofa-runtime-esb</artifactId> </dependency>

log4j中配置日志相关内容

sofa的配置文件: dbconf数据库配置文件(有几套环境可以选择) sofaTestConfig文件配置接口以及系统间的调用(本地) antx文件配置系统间的调用(服务器上) pom.xml文件各种依赖的添加

 

2.HashMap,如何解决hash冲突?


3.为啥说java比php安全?类加载机制,子父类?接口和抽象类区别?


4.spring的aop如何用?用哪个类管理bean?

切面,通知,适配器

ApplicationContext

5.设计模式?jdk动态代理核心类,cglib动态代理核心类?
工厂,单例,模板,动态代理,装饰责,适配器
jdk的动态代理指定接口Proxy和InvcationHandler的invoke()方法
cglib动态代理不指定接口
Enhancer和HelloService,MethodInterceptor的intercept()方法


6、线上sofa项目错误日志如何排查?
    grep traceId  *.log
    
 7、查看日志关键字重复出现的次数命令,
    perl -e '$/=undef;$_=<>; printf "$&:%dn", s/$&//g while /theWord/;' filename
    
 8、查看日志多个关键字的命令?
    grep 关键字1|关键字2
    
9、数据库调优?    主键索引的缺点?

10、如何排查数据库出现查询慢?
    这个可能有很多,最容易出现的是由于数据的增多,缺失索引造成的性能下降会显同出来,
还有就是对于线性增长的数据量,统计信息也会更新的越来越慢,导致执行计划变得很差。
当然具体问题具体分析,需要排查,不仅是db方面,web应用程序池也可能会出故障,变
慢首先要确定是app还是db,如果是db,需要看程序执行的这些sql语句实际效率如何,这
个就是所谓的调优,调优最小的成本是加索引或修改sql或数据归档,这个过程需要判断
瓶颈,如果是硬件原因)CPU/Memory/IO),需要升级硬件解决。

11、如何解决并发?
    通过锁机制
    数据库加锁  /redis 分布式锁setnx 判断key是否存在,不存在,说明已经拿到锁。

12、为啥不用单线程而要用多线程?
    多线程可以最大限度地利用CPU资源
13.java.util.concurrent包?
14.jvm的算法?hashCode算法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值