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算法?