JAVA必背面试题3(框架+项目)

五 框架

  1. 三大框架使用的版本?三大框架各核心组件及作用;如果不用三大框架,jdbc能不能下出来?

(1)三大框架的版本:struts 2; spring 3; hibernate 3.3;

(2)组件及作用:Java三大框架主要用来做WEb应用; Struts主要负责表示层的显示;Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作);Hibernate主要是数据持久化到数据库;

(3)Struts的组件:Struts对Model,View和Controller都提供了对应的组件;

Model部分:由JavaBean组成,ActionForm用于封装用户的请求参数,封装成ActionForm对象,该对象被ActionServlet转发给Action,Action根据ActionFrom里面的请求参数处理用户的请求。JavaBean则封装了底层的业务逻辑,包括数据库访问等。

View部分:该部分采用JSP实现。Struts提供了丰富的标签库,通过标签库可以减少脚本的使用,自定义的标签库可以实现与Model的有效交互,并增加了现实功能。对应上图的JSP部分。

Controller组件:Controller组件有两个部分组成——系统核心控制器,业务逻辑控制器。   系统核心控制器,对应上图的ActionServlet。该控制器由Struts框架提供,继承HttpServlet类,因此可以配置成标注的Servlet。该控制器负责拦截所有的HTTP请求,然后根据用户请求决定是否要转给业务逻辑控制器。业务逻辑控制器,负责处理用户请求,本身不具备处理能力,而是调用Model来完成处理。对应Action部分。

(4)Spring的组件:工厂类BeanFactory;反转控制IOC;面向切面编程AOP

Spring实现了工厂模式的工厂类BeanFactory,在程序中通常BeanFactory的子类ApplicationContext。Spring相当于一个大的工厂类,在其配置文件中通过元素配置用于创建实例对象的类名和实例对象的属性。

Spring提供了对IOC良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦

Spring提供了对AOP技术的良好封装, AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码;例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP;

(5)Hibernate的组件:五个核心接口:session接口,sessionFactory接口,configuration接口,transaction接口,query和criteria接口;

Session接口:负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的session不同于JSP应用中的HttpSession。这里当使用session这个术语时,其实指的是Hibernate中的session,而以后会将HttpSession对象称为用户session。

SessionFactory接口:负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。

Configuration接口:负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate的启动的过程中,Configuration类的实例首先定位映射文档位置、读取配置,然后创建SessionFactory对象。

Transaction接口:负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。

Query和Criteria接口:负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式.

JDBC:

Connection cn=null;

PreparedStatement pst=null;

ResultSet rs=null;

Try{Class.forname(driverClassName);

cn=DriverManager.getStatement(“sql”);

pst.setString(1,statementName);

rs=pst.executeQuery();

While(rs.next()){

System.out.println();}

}catch(Exception e){

e.printStackTrace();

}finally{

If(rs!=null){rs.close()};

If(pst!=null){pst.close()};

If(cn!=null){cn.close()};

}

  1. hql语句是如何查询的?hql语句中内切和外切的区别?

(1):hql是面向对象的类名,属性区分大小写;from+你的实体类;

(2)内切:利用内连接可获取两表的公共部分的记录;采用左外连接查询返回的结果集中包含的是对象数组,对象数组中的每个元素存放了一对相互关联的Customer对象和Order对象,而迫切左外连接会返 回Customer对象,与Customer对象相关联的Order对象存放在Customer对象的集合元素对象中,这就是迫切左外连接和左外连接查询 的其中一个区别;另一个区别是当使用左外连接时,对关联对象的检索会依照实体映射配置文件所指定的策略,而不会像迫切左外连接那样忽略它,比如此时对Customer对象关联的Order对象采用延迟加载,那么左外连接检索也会使用延迟加载机制检索 Order对象。

(3)采用迫切内连接检索,对集合元素的检索策略以及返回结果集中的对象类型都采用与迫切左外连接一样的方式,QBC查询不支持迫切内连接检索.

  1. 多表关联什么情况下用hashmap?

(1)Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据(class,interface,array ),但key不能重复。所以通过指定的key就可以取出对应的value。HashMap可以让你将空值作为一个表的条目的key或value,HashMap最多只有一个key值为null,但可以有无数多个value值为null。

spring mvc工作机制?MVC里面视图的好处?

工作机制:客户端请求提交到DispatcherServlet

由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller

DispatcherServlet将请求提交到Controller

Controller调用业务逻辑处理后,返回ModelAndView

DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图

视图负责将结果显示到客户端

视图的好处:视图对象的定义比实体定义还要简单,不需要注解,不需要映射,但是唯一不同的是我们需要额外构造一个带有字段初始化的构造函数

  1. hibernat和mybaitis的优势和区别?haibernate的缓存机制有没有了解过?如何使用hibernate将数据永久保存到数据库中?mybaitates是如何实现查询的?hibernate有很多数据操作时候如何优化?

    (1)hibernate的优势:· MyBatis可以进行更为细致的SQL优化,可以减少查询字段。· MyBatis容易掌握,而Hibernate门槛较高。

    (2)mybaitis 的优势:· Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射;· Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便;· Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。· Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

    (3)区别:Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。· iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。

    (4)Hibernate一级缓存是Session缓存,利用好一级缓存就需要对Session的生命周期进行管理好。建议在一个Action操作中使用一个Session。一级缓存需要对Session进行严格管理。Hibernate二级缓存是SessionFactory级的缓存。 SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。

    (5)mybatitis的查询:Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。mybatis是数据映射器(数据映射器层:用于在对象和数据库之间搬运数据,同时保证对象、数据库和数据映射器层本身相对独立。Martin Fowler 《企业应用架构模式》)把sql语句的参数与结果(即输入与输出)映射为类。为如何在类和数据库间建立映射带来了更大的灵活性。同时也更好的隔离了数据库设计和应用程序中使用的对象模型。

    (6)hibernate 的持久化:Hibernate采用了更自然的面向对象的视角来持久化 Java 应用中的数据。使用 Hibernate 的开发者应该总是关注对象的状态(state),不必考虑 SQL 语句的执行。这部分细节已经由 Hibernate 掌管妥当,只有开发者在进行系统性能调优的时候才需要进行了解。

    (6)mybatis的调优:MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。 MyBatis可以进行详细的SQL优化设计。

    (7)hibernate如何实现优化:· 制定合理的缓存策略;

· 尽量使用延迟加载特性;· 采用合理的Session管理机制;· 使用批量抓取,设定合理的批处理参数(batch_size);· 进行合理的O/R映射设计

  1. spring、hibernate、Struts的工作原理,为什么使用这些框架?简单说下struts2中数据传递情况? hibernate的三种状态和彼此的区别?使用hibernate如何分页?spring的事务隔离级别?ssh如何整合(spring核心流程)?

(1)spring的工作原理:

ISpring内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行 时动态的区创建、调用对象,Spring就是在运行时,跟xmlSpring的配置文件来动态的创建对象,和调用对象里的方法。

II.Spring工作原理还有一个核心就是Aop这个就是面向切面的编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能这些都是通过配置类达到的。

III.Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(主要是通过反射机制)。

(2)hibernate的工作原理:

I.读取并解析hibernate.cfg.xml配置文件

II.读取并解析映射信息

III.创建SessionFactory

IV.负责被持久化对象CRUD操作,打开Sesssion

V.创建并启动事务Transation

VI.操作数据,持久化操作

VII.提交事务,关闭Session,关闭SesstionFactory;

(3)struts的工作原理同下:

I.客户端浏览器发出HTTP请求。II.根据web.xml配置,该请求被FilterDispatcher接收。III.根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。IV.Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。V.Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。VI.返回HTTP响应到客户端浏览器。

(4)使用原因:

struts是开源软件。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的选择。

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任;

Spring:Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益.

(5)struts数据传递:可以直接基于应用程序域对象转移,验证数据,数据绑定,动作把从请求接收到的所有数据放在简单的JavaBean上。除了单独接受每个数 据,struts2最优雅的地方时可以创建一个对象来放置这些琐碎的数据,我们可以把复杂对象本身提供给平台的数据转移机制。这不但节省时间,而且也能节 省工作量。

(6)hibernate的三种状态和区别:

瞬时(transient):也叫自由状态.数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。

持久(persistent):数据库中可能有数据与之对应(save),当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。

脱管(detached):也叫游离状态.数据库中可能有数据与之对应,但当前没有session与之关联,但是有oid;托管对象状态发生改变,hibernate不能检测到。

区别:Transient状态的实体缺乏与数据库表记录之间的联系,而Detached状态的实体恰恰相反.只不过是脱离了session这个数据库操作平台而已.

(7)hibernate分页:1.HQL查询:Query query=session.createQuery(from 实体类);2.从第几条开始:query.setFirstResult(mini);3.每次最多提取多少条数据:query.setMaxResults(max);接收返回的结果集:List<实体类> HousesList=query.list();

代码如下(Query query = session.createQuery(hql);

query.setParameter(0, userId);

query.setMaxResults(maxCount);

query.setFirstResult(firstResult);

return query.list();

)

(8)ssh整合步骤:

1.导入struts2的jar包以及struts2-spring-plugin-2.0.11.2.jar;

2.在web.xml中分别配置struts2与spring相关信息;

3.struts中原有的Action需要继承ActionSupport;

4.在Spring配置Action Bean;

5.在Struts2的配置文件中,调用Spring中配置的Bean;

6.Spring与Hibernate整合,只需要在Spring配置文件配置SessionFactory即可

(9)Spring的隔离级别:Default默认的事务隔离级别

READ_UNCOMMITTED读未提交,一个事务可以操作另外一个未提交的事务,不能避免脏读,不可重复读,幻读,隔离级别最低,并发性 能最高

READ_COMMITTED读已提交,一个事务不可以操作另外一个未提交的事务, 能防止脏读,不能避免不可重复读,幻读。

repeatable_read能够避免脏读,不可重复读,不能避免幻读

SERIALIZABLE隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。

  1. Struts的工作流程;

工作流程:

(1)客户端提交一个HttpServletRequest请求(action或JSP页面)。

(2)请求被提交到一系列Filter过滤器,如ActionCleanUp和FilterDispatcher等。

(3)FilterDispatcher是Struts2控制器的核心,它通常是过滤器链中的最后一个过滤器.

(4)请求被发送到FilterDispatcher后,FilterDispatcher询问ActionMapper时候需要调用某个action来处理这个Request。

(5)如果ActionMapper决定需要调用某个action,FilterDispatcher则把请求交给ActionProxy进行处理.

(6)ActionProxy通过Configuration Manager询问框架的配置文件struts.xml,找到调用的action类。

(7)ActionProxy创建一个ActionInvocation实例,通过代理模式调用Action。

(8)action执行完毕后,返回一个result字符串,此时再按相反的顺序通过Intercepter拦截器。

(9)最后ActionInvocation实例,负责根据struts.xml中配置result元素,找到与之相对应的result,决定进一步输出。

基本简要流程:

I.客户端浏览器发出HTTP请求。

II.根据web.xml配置,该请求被FilterDispatcher接收。

III.根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。

IV.Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。

VI.Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。VI.返回HTTP响应到客户端浏览器。 
  1. 简述SSH工作流程;

(1)JSP页面发出请求,Struts接收页面请求,Struts的action调用业务逻辑,业务逻辑调用业务组件(其中使用到Spring的依赖注入 IOC,或者AOP等);业务组件根据Hibernate的对象/关系数据库的映射关系查询数据库。Struts根据结果返回页面。

  1. 谈谈Spring和Spring MVC的流程和事务;spring配置文件都写什么?

(1)spring提供两种管理事务的方式:一种是声明式事务,一种是编程式事务。

Spring的声明式事务管理,基于Spring的AOP,基于Spring AOP实现,几乎就是xml文件的配置,不再需要不停地写commit,rollback,(但Spring仍然没有放弃编程式的事务管理策略)。

Spring的编程式事务管理,统一的事务编码风格,几乎是一个模板化的。

为我们提供了一个TransactionTemplate,使用回调机制,将应用代码从样板式的资源获取和释放代码中解放出来,不再有大量的try/catch/finally/try/catch代码块。

(2)springMVC的流程和事务:动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射 ,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置
文件来动态的创建对象,和调用对象里的方法的 。

Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。

(3)spring的配置文件:一、引用外部属性文件;二、常用数据源的配置;三、配置事务管理器;四、context:component-scan ;五、aop注解支持;六、缓存配置;七、 ;

  1. ssm和ssh的区别?

(1)基于MVC三层架构,使用ssh框架 or ssm框架 or ssi框架,采用面向接口的方式编程。
共同点是struts、spring,不同点是nibernate和mybatis、ibatis。

(2)相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。

(3)由于hibernate是完全面向对象的编程,在实现dao中就非常的方便,而且不重复;当mybatis在.java代码中也是可以做到不重复,麻烦一点的是,每个映射文件都必须编写几乎相同的配置,除了resultType不一样。

(4)hibernate在实际编程中可以把基础的CRUD封装,比如BaseDao类。其它类只要去继承BaseDao就能执行所有的基础的CRUD。这样就非常方便。这个带来的好处还有,可以建立BaseService和BaseAction。

由于mybatis的映射文件中,虽然SQL语句中的表名可以通过parameterType指定,但是resultType必须定死,不能以参数 的形式给予指定。导致的结果就是所有的DAO类的每个CRUD都必须和指定的映射文件绑定在一起,以至于不可能存在BaseDao类。当然也就不能建立 BaseService和BaseAction。

  1. spring核心:aop和ioc的解释?隔离范围? 3种注入方法?

(1)aop:Spring提供了对AOP技术的良好封装, AOP称为面向切面编程,就是系统中有很多各不相干的类的方法,在这些众多方法中要加入某种系统功能的代码;例如,加入日志,加入权限判断,加入异常处理,这种应用称为AOP。实现AOP功能采用的是代理技术,客户端程序不再调用目标,而调用代理类,代理类与目标类对外具有相同的方法声明,有两种方式可以实现相同的方法声明,一是实现相同的接口,二是作为目标的子类在,JDK中采用Proxy类产生动态代理的方式为某个接口生成实现类,spring提供了这种支持,只需要在spring配置文件中配置这两个元素即可实现代理和aop功能;

(2)Ioc:Spring提供了对IOC良好支持,IOC是一种编程思想,是一种架构艺术,利用这种思想可以很好地实现模块之间的解耦。IOC也称为DI(Depency Injection);IOC可以理解为‘面向接口编程思想’的一种实现方法,通过IOC实现了强制的‘面向接口编程’。

(3)隔离范围: Spring支持JDBC规范定义的四种隔离级别

Default默认的事务隔离级别

READ_UNCOMMITTED读未提交,一个事务可以操作另外一个未提交的事务,不能避免脏读,不可重复读,幻读,隔离级别最低,并发性 能最高

READ_COMMITTED读已提交,一个事务不可以操作另外一个未提交的事务, 能防止脏读,不能避免不可重复读,幻读。

repeatable_read能够避免脏读,不可重复读,不能避免幻读

SERIALIZABLE隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。

(4)Spring的注入和IoC反转控制是一回事;关于getter和setter方式的注入;

Autowire=”defualt”;autowire=”byName”;autowire=”byType”;

  1. 两亿条数据如何同时删除

(1)· public boolean delUsers(String[] userIds){

· boolean flag = false;

· Connection conn = null;

· PreparedStatement pstmt = null;

· String sql = “delete from t_user where user_id=?”;

· try {

· conn = DbUtil.getConnection();

· conn.setAutoCommit(false);

· pstmt = conn.prepareStatement(sql);

        for(int i =0 ;i<userIds.length;i++){   

· pstmt.setString(1,userIds[i].trim());

· pstmt.addBatch();

· }

· pstmt.executeBatch(); //批量执行

· conn.commit();//提交事务

· flag = true;

· } catch (SQLException e) {

· try {

· conn.rollback(); //进行事务回滚

· } catch (SQLException ex) {

· }

· }finally {

· DbUtil.close(pstmt);

· DbUtil.close(conn);

· }

· return flag;

· }

  1. 如何将1个g的数据最快速度放进C盘中?

(1)public class Test01 {

public static void main(String[] args) throws Exception{

    getInputStream("C:\\setup.log","D:\\a.txt");

}

private static void getInputStream(String pathName,String copyName)throws Exception{

    File file = new File(pathName);

    if(!file.exists())

        throw new RuntimeException("文件不存在呀,你Copy个屁!");

    else{

        getCopy(copyName,new BufferedInputStream(new FileInputStream(file)));

    }

}

private static void getCopy(String copyName,BufferedInputStream bis)throws Exception{

    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(copyName));

    BufferedInputStream biss = bis;

    byte[] b = new byte[biss.available()];

    int len = 0;

    while((len = biss.read(b))!=-1){

        bos.write(b, 0, len);

    }

    bos.close();

    biss.close();

    System.out.println(copyName+"复制成功!");

}

冒泡排序:

public static void bubbleSort(int[] numbers) {
int temp; // 记录临时中间值
int size = numbers.length; // 数组大小
for (int i = 0; i < size - 1; i++) {
for (int j = i + 1; j < size; j++) {
if (numbers[i] < numbers[j]) { // 交换两数的位置
temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
}

选择排序:

public static void selectSort(int[] numbers) {
int size = numbers.length, temp;
for (int i = 0; i < size; i++) {
int k = i;
for (int j = size - 1; j >i; j–) {
if (numbers[j] < numbers[k]) k = j;
}
temp = numbers[i];
numbers[i] = numbers[k];
numbers[k] = temp;
}
}
项目面试通关必懂

项目通用问题:

1.介绍下整个项目流程,谈谈你自己负责的模块?别人的模块是否了解?

2.讲解下自己负责的模块,这个模块如何实现的?做这个项目时候遇到怎样的问题?

3.你在项目组中的角色和优势?

4.做项目的时间,项目组几个人,多长时间完成?

  1. 介绍下算法和项目的思路?

  2. 问session和cookie的区别?

    (1)具体来说cookie机制采用的是在客户端保持状态的方案,而session 机制采用的是在服务器端保持状态的方案。由于才服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上还有其他选择。

  3. 问登陆页;

  4. Spring事务;

  5. 同步锁;

10.往关联两个表中添加数据,如果没有添加成功,会怎样?如何处理?

11.说下使用的项目ssm框架和使用的技术Json和ajax。

12.大数据如何处理?数据库如何批量删除和批量插入?

具体项目还要清楚

一:好买网商城项目

1:商城项目的需求,介绍整个项目流程;

二:你我贷金融P2P项目

1.项目利息问题;

2.身份如何验证的问题?

3.项目的逻辑关系?

4.第三方接口怎么写?

5.违约如何提醒的问题?

6.金额除不尽的问题?

三 进销存项目:

1.介绍下进销存项目?

介绍项目时先说项目需求,然后从开始的进销存进货说到最后,进销存的模块:进货、销售、库存、财务报表、用户管理、信用冻结、全局资源,然后按照销售流程把项目贯穿一下。

2.进销存项目负责的模块是什么?

3.权限:权限分配;做权限控制,数据库关系映射介绍下?

4.数据库资金类型设置成bigdecimal还是double?

5.报表用的是什么?

6.一个项目数据库牵扯几个表?

7.进销存多少个表?用户管理方面多少个模块?用户管理模块多少个表?

  1. 如何判断是自己的采购、给哪家公司做的、好多人买东西发生了错误如何解决(事物&多线程)
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值