java连接SQLjava调用service卡住数据库的代码封装成为单独的一个类

HI,大家好今天给大家分享一个懒囚必备神技,不写一句 java调用service卡住层和dao(数据库操作层)的代码而实现增删改查

不写一句 java调用service卡住层和dao(数据库操作层)的代码而实现增删改查?

看到这里你可能会说:老铁,不写重复的代码我知道把重复的代码提取出来封装成类。这个我早就知道了至于不写java调用service卡住和dao的代碼能直接操作数据库,难道直接写在Controllor层么别开玩笑了。

别急我说的不写重复的代码不是在一个项目中,而是在项目的前端API 和后台管理項目上都没有重复的代码,至于不写java调用service卡住和Dao层代码不用卸载Controllor层,在保证原来MVC的架构上不写下面我就来收一下整体思路。


不写重複代码在一个项目中前台API和后台管理服务都可能对同一张表进行增删改查,这可能涉及到前端api写查询后台管理也写到重复的查询,这樣代码就冗余了一份查询的方法那我的做法是把相同的部分提取出来,形成一个公共的依赖模块(Common)然后api和管理项目就分别依赖Common 就行,这样减少了前后两个项目中相同代码的出现结构为,Server-api,Server-admin,Server-common三个模块这样就可以把api和admin中同时出现的代码写到Server-common中,如数据库的链接时间工具类、微服务调用工具、entity实体类、全局异常捕获类、全局常量等。

最后就是对Dao层和java调用service卡住层的封装把常用的增删该查代码封装为一个baseDao基类,一个java调用service卡住层基类一个Controllor层基类和一个entity基类。都使用泛型封装代码如下:


可以看到,没有写一句DAO和java调用service卡住层的代码就可以實现对数据库的增删改查!

}

前言:找不到原文出题作者如囿看到,联系我声明

Java高级工程师面试题总结及参考答案

1、 JVM结构原理、GC工作机制详解

答:具体参照: ,说到GC记住两点:1、GC是负责回收所囿无任何引用对象的内存空间。 注意:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身2、GC回收机制的两种算法,a、引鼡计数法 b、可达性分析算法( 这里的可达性大家可以看基础2 Java对象的什么周期),至于更详细的GC算法介绍大家可以参考:

2、Java对象的生命周期

答:创建阶段 、 应用阶段 、不可见阶段 、不可达阶段 、收集阶段 、终结阶段、 对象空间重新分配阶段等等,具体参照:

答:HashMap是由数组+鏈表的一个结构组成具体参照:

4、当数据表中A、B字段做了组合索引,那么单独使用A或单独使用B会有索引效果吗(使用like查询如何有索引效果)

答:看A、B两字段做组合索引的时候,谁在前面谁在后面,如果A在前那么单独使用A会有索引效果,单独使用B则没有反之亦然。哃理使用like模糊查询时,如果只是使用前面%那么有索引效果,如果使用双%号匹配那么则无索引效果

5、数据库存储日期格式时,如何考慮时区转换问题

二、线程、设计模式、缓存方面

1、SimpleDataFormat是非线程安全的,如何更好的使用而避免风险呢

2、如何看待设计模式并简单说说你對观察者模式的理解

3、集群环境中,session如何实现共享

2、还有一种方案就是使用一个固定的服务器专门保持session,其他服务器共享

4、分布式、集群环境中缓存如何刷新,如何保持同步

A、缓存如何刷新? 1、定时刷新 2、主动刷新覆盖 每个缓存框架都有自带的刷新机制,或者说缓存失效机制就拿Redis和 Ehcache举例, 他们都有自带的过期机制另外主动刷新覆盖时,只需获取对应的key进行数据的覆盖即可

B、缓存如何保持同步 這个redis有自带的集群同步机制,即复制功能具体参考: ,Ehcache也有分布式缓存同步的配置只需要配置不同服务器地址即可,参照:

5、一条sql执荇过长的时间你如何优化,从哪些方面

1、查看sql是否涉及多表的联表或者子查询,如果有看是否能进行业务拆分,相关字段冗余或者匼并成临时表(业务和算法的优化)

2、涉及链表的查询是否能进行分表查询,单表查询之后的结果进行字段整合

3、如果以上两种都不能操作非要链表查询,那么考虑对相对应的查询条件做索引加快查询速度

4、针对数量大的表进行历史表分离(如交易流水表)

5、数据库主从分离,读写分离降低读写针对同一表同时的压力,至于主从同步mysql有自带的binlog实现 主从同步

6、explain分析sql语句,查看执行计划分析索引是否用上,分析扫描行数等等

7、查看mysql执行日志看看是否有其他方面的问题

个人理解:从根本上来说,查询慢是占用mysql内存比较多那么可以從这方面去酌手考虑

1、Spring 事务的隔离性,并说说每个隔离性的区别

2、Spring事务的传播行为并说说每个传播行为的区别

5、简单说说Spring 事务机制

四、負载均衡、集群相关

1、weblogic 负载均衡的原理和集群的配置

1、web如何项目优化

解答:这个我整理过一次,

2、单例模式有几种 如何优化?

3、简单说說线程池的原理和实现

1、项目并发如何处理(我们是web项目)

解答:,另外还有数据库乐观锁,数据库读写分离、使用消息队列、多用存储过程等等

2、简单说说功能权限存在的水平权限漏洞和垂直权限漏洞的场景和解决办法(因为我们目前权限级别就是功能权限)

A、水平權限漏洞如下图
假设机构有 用户A和用户B 两个用户,其中A有1、2和3权限 用户B有 2 和3 的权限,这时候假设用户B 知道1并给自己添加1的权限,这時候就是水平权限漏洞

目前解决办法:1、限制入口,让用户B无法编辑自己的权限 2、对用户B无法进行向上扩展最根本的解决办法是深入箌数据权限

3、平台上的图片如何防盗链

4、如何区分上传的图片是不是木马?

解答:1、看上传的图片后缀 2、如何后缀是篡改的那么每个文件有个魔术数字

5、消息队列的原理和实现

1、mysql查询字段区不区分大小写?

解答:不区分哪怕值也不区分(我当时还反问了,区不区分大小嘚应用含义有哪些面试官没说得出来)

2、简单说说数据库集群和负载均衡、分布式(我不懂这块)

3、存储过程的结构和优点

4、触发器的原理和作用

八、Java底层基础题

2、一个类对象属性发生改变时,如何让调用者知道

答: ,即在set方法改变属性时触发 ,这种模式也可以理解為观察者模式具体查看:

答:判断两个对象是否相等,比较的就是其hashCode, 如果你重载了equals比如说是基于对象的内容实现的,而保留hashCode的实现不變那么很可能某两个对象明明是“相等”,而hashCode却不一样 hashcode不一样,就无法认定两个对象相等了

4、谈谈你对JVM的理解

答: Java语言的一个非常偅要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键Java编译器只要面向JVM,生成JVM能理解的代码或字节码文件Java源文件经编譯成字节码程序,通过JVM将每一条指令翻译成不同平台机器码通过特定平台运行。

JVM执行程序的过程 :I.加载class文件 ,II.管理并分配内存 III.执行垃圾收集

JRE(java运行时环境)由JVM构造的java程序的运行环境

5、Mysql的事物隔离级别?

答:Spring的核心是IOC和AOP IOC是依赖注入和控制反转, 其注入方式可分为set注入、构造器注入、接口注入等等IOC就是一个容器,负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖简单理解就是:JAVA每個业务逻辑处理至少需要两个或者以上的对象协作进行工作,但是每个对象在使用它的合作对象的时候都需要频繁的new 对象来实现,你就會发现对象间的耦合度高了。而IOC的思想是:Spring容器来管理这些对象只需要处理本身业务关系就好了。至于什么是控制反转就是获得依賴对象的方式反转了。

AOP呢面向切面编程,最直接的体现就是Spring事物管理至于Spring事物的相关资料,就不细说了参考:

7、谈谈你对NIO的理解

答:IO是面向流,NIO是面向缓冲 这里不细讲了,具体参照:

答:总得来说可以理解为:.

 1.ArrayList是实现了基于动态数组的数据结构LinkedList基于链表的数据结構。 

Vector和ArrayList类似,但属于强同步类即线程安全的,具体比较参照:

9、随便说说几个单例模式并选择一种线程安全的

答:单例的类别:懒汉、餓汉、枚举、静态内部类、双重校验锁 等等 , 选择线程安全我选最后一种双重校验锁。 具体实现方式参照:

答:算法和数据结构一直是峩薄弱之处这方面说自己补吧,成效不大这里我就推荐一个:

11、举例说说几个排序,并说明其排序原理

答:这里我就不细说了大家洎己看看

答:索引的作用大家都知道,就是加快查询速度但是原理,我说不上来这里直接看吧:

13、序列化的原理和作用

答:Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程,主要用于HTTP或者Webjava调用service卡住接口传输过程中對象参数的传播具体可参看:

1、说说线程安全的几种实现方式?

答:什么是线程安全 我的理解是这样的,一个对象被多个线程同时访問还能保持其内部属性的顺序性及同步性,则认定为线程安全实现线程安全的三种方式:被volatile、synchronized等关键字修饰,或者使用java.util.concurrent下面的类库 臸于前两者的关系,参考:

2、方法内部如何实现更好的异步?

答:我们知道异步其实就是让另一个线程去跑那么如何创建线程? 第一種直接new Thread 第二种new 一个实现Runnable接口的实现类。 第三种通过线程池来管理创建等 ,这里说到更好的实现异步那就是说我们在方法内部避免频繁的new 线程,就可以考虑线程池了 那么线程池如何创建? 这里可以new 一个线程池但是需要考虑单例,或者在程序初始启东时就创建一个線程池,让他跑着然后在具体方法的时候,通过线程池来创建线程实现异步

答1:最直接的表现就是减轻数据库的压力。避免因为数据讀取频繁或过大而影响数据库性能降低程序宕机的可能性

答2:nginx常用做静态内容服务和代理服务器,直面外来请求转发给后面的应用服务nginx本身也能做缓存,比如静态页面的缓存什么的而tomcat是应用服务器,处理JAVA WEB程序功能等等 你也可以这么理解,假设把用户的请求当做是一條河流那么nginx就相当于一个水利工程,tomcat相当于一条条分流的支流而redis 相当于支流旁边的一个个水库。 当你洪水来了nginx根据你每条支流的承受力度分发不同的水流量,在确保程序正常运行的情况下分发给每条支流(tomcat)不同的水流量。而redis相当于一个个支流的水库存储水源,降低压力让后面的水量平稳。

4、日常项目中如果你接手,你准备从哪些方面调优

答:这个呢首先是了解哪些需要优化,需要优化肯定昰项目性能遭遇瓶颈或者猜测即将遭遇了我们才会去考虑优化。那么怎么优化

a、扩容 ,扩容的理解就是扩充服务器并行处理的能力,简单来说就是加服务器增加处理请求的能力,例如增加nginx 、tomcat等应用服务器的个数或者物理服务器的个数,还有加大服务器带宽等等這里考虑的是硬件方面

b、调优 ,调优包括系统调优和代码调优 。 系统调优就是说加快处理速度比如我们所提到的CDN、ehcache、redis等缓存技术,消息队列等等加快服务间的响应速度,增加系统吞吐量避免并发,至于代码调优这些就需要多积累了,比如重构、工厂等 数据库调優的话这个我不是很懂,只知道索引和存储过程具体参考: ,其他数据库调优方面就各位自己找找吧

5、谈谈你对分布式的理解

答:个人悝解:分布式就是把一个系统/业务 拆分成多个子系统/子业务 去协同处理这个过程就叫分布式,具体的演变方式参考:

6、Redis实现消息队列

8、汾享一个调优工具和方案

十、手写代码题(包含sql题)

1、假设商户表A(id , city ) ,交易流水表B (aid, amount , time) 这里的time代表交易时间 请用sql写出查询每个城市每個月的销售业绩(答案可在评论里回复)

2、假设有一个数组 A ,int[] A = { 1 , 3 , -1 ,0 , 2 , 1 , -4 , 2 , 0 ,1 … N}; 原来是需要查出大于0的数组但是由于传参错误或者其他原因,导致查出0囷负数了现在要求在不使用新数组和新集合的情况下(即只使用这个A数组,因数组数据比较大且只能用一次循环) 实现正数放到数组嘚前面,小于等于0的数放到数组的末尾(答案可在评论里回复)

面试还会问到一些关于设计方案相关的问题比如

1、你的接口服务数据被囚截包了,你如何防止数据恶意提交

答:我们可以在接口传输参数里面设置一个业务编号,这个编号用来区分是否重复提交这样即使數据被抓包了,对方也无法区分每个字段你的含义这时,这个业务编号的作用就来了

2、假设服务器经常宕机你从哪些方面去排查问题?

答:这个就留个各位看官补充了可评论回复

}

使用DBUtil类封装两个静态方法,一個得到连接方法一个关闭连接方法,以MySQL为例:

使用JDBC_test进行测试数据库操作:

针对数据库连接操作封装成类,需要数据库操作直接通过类名来調用在JDBC的各种语句执行中还有很多可优化的地方,大家不妨自己多研究一下

}

我要回帖

更多关于 java调用service卡住 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信