java宝典(7)

简介: java宝典(7)

106、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?

Public String translate (String str) {


  String tempStr = "";


  try {


    tempStr = new String(str.getBytes("ISO-8859-1"), "GBK");


    tempStr = tempStr.trim();


  }


  catch (Exception e) {


    System.err.println(e.getMessage());


  }


  return tempStr;


}


107.现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供reset

108. 数据库部分

109、数据库三范式是什么?

第一范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解


第二范式:2NF是对记录的唯一约束,要求记录有唯一标识,即实体的唯一性


第三范式:3NF是对字段行的约束,即任何字段不能由其他字段派生出来,要求字段没有余,,(是直接相关而不是间接相关)


110、说出一些数据库优化方面的经验?

111、union和union all有什么不同?

Union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复, union:对两个结果集惊醒并集操作,不包括重复行,同时进行默认规则的排序,union all;对两个结果集进行并集操作包括重复行,不进行排序;


112查出比经理薪水还高的员工信息:

Drop table if not exists employees;


create table employees(id int primary key auto_increment,name varchar(50)


,salary int,managerid int references employees(id));


insert into employees values (null,'zxx',10000,null), (null,'lhm',15000,1


),(null,'flx',9000,1),(null,'tg',10000,2),(null,'wzg',10000,3);



Wzg大于flx,lhm大于zxx



select e.* from employees e,employees m where e.managerid=m.id and e.sala


ry>m.salary;


113、oracle关联查询题目1

数据库中有3个表 teacher 表,student表,tea_stu关系表。

teacher 表 teaID name age

student 表 stuID name age

teacher_student表 teaID stuID

要求用一条sql查询出这样的结果

 1.显示的字段要有老师name, age 每个老师所带的学生人数

2 只列出老师age为40以下学生age为12以上的记录


预备知识:


     1.sql语句是对每一条记录依次处理,条件为真则执行动作(select,insert,delete,update)


      2.只要是迪卡尔积,就会产生“垃圾”信息,所以,只要迪卡尔积了,我们首先就要想到清除“垃圾”信息


实验准备:


drop table if exists tea_stu;


drop table if exists teacher;


drop table if exists student;


     create table teacher(teaID int primary key,name varchar(50),age int);


     create table student(stuID int primary key,name varchar(50),age int);


     create table tea_stu(teaID int references teacher(teaID),stuID int references student(stuID));


insert into teacher values(1,'zxx',45), (2,'lhm',25) , (3,'wzg',26) , (4,'tg',27);


insert into student values(1,'wy',11), (2,'dh',25) , (3,'ysq',26) , (4,'mxc',27);


insert into tea_stu values(1,1), (1,2), (1,3);


insert into tea_stu values(2,2), (2,3), (2,4);


insert into tea_stu values(3,3), (3,4), (3,1);


insert into tea_stu values(4,4), (4,1), (4,2) , (4,3);



结果:2à3,3à2,4à3



解题思路:(真实面试答题时,也要写出每个分析步骤,如果纸张不够,就找别人要)


1要会统计分组信息:


select teaid,count(*) from tea_stu group by teaid;


2.要会筛选大于40的老师


 先讲给1号学生带课的所有老师的名字,要知道1号学生的老师,要从哪个表获得?从tea_stu里才可以,从这个表里获得的是老师的什么?是老师的teaID,如果要得到老师的名称,则必须拿着teaID去teacher里找。所以,这两个表要进行关联,关联就引出迪卡尔既的问题。假设我们好获得teaID为1的老师的名称,我们要关联的是哪条记录?是1那一条,但是,迪卡尔既的结果有几条啊?4条,显然,我接着要做的就是把其他垃圾的3条去掉。


select * from tea_stu,teacher where tea_stu.teaID=teacher.teaID;


再接着去掉大于40的老师:


select * from tea_stu,teacher where tea_stu.teaID=teacher.teaID and teacher.age<=40;


3.再对上面的结果去掉小于12的学生


select * from


(select tea_stu.* from tea_stu,teacher where tea_stu.teaID=


teacher.teaID and teacher.age<40) as t,


student


where t.stuid=student.stuid and student.age>12;


4.再对上面的结果进行统计,显示的是老师的id和组信息


select t.teaID,count(*) from


(select tea_stu.* from tea_stu,teacher where tea_stu.teaID=


teacher.teaID and teacher.age<40) as t,


student


where t.stuid=student.stuid and student.age>12


group by t.teaID;



5.然后对上面的东西进行改写,改写成显示老师的名字


select teacher.name,t2.c from


(select t.teaID,count(*) c from


(select tea_stu.* from tea_stu,teacher where tea_stu.teaID=


teacher.teaID and teacher.age<40) as t,


student


where t.stuid=student.stuid and student.age>12


group by t.teaID) as t2,


teacher


where teacher.teaID=t2.teaID;



第二种写法:


select teacher.teaID, teacher.name, t1.total from teacher,


(select teaID,count(tea_stu.stuID) total from tea_stu, student


where tea_stu.stuID = student.stuID and student.age>12


group by teaID ) as t1


where teacher.teaID = t1.teaID and teacher.age<40 ;



求出发帖最多的人:


select authorid,count(*) total from articles


group by authorid


having total=


(select max(total2) from (select count(*) total2 from articles group by authorid) as t);



select t.authorid,max(t.total) from


(select authorid,count(*) total from articles )as t


这条语句不行,因为max只有一列,不能与其他列混淆。



select authorid,count(*) total from articles


group by authorid having total=max(total)也不行。


114、什么是存储过程和如何编写

存储过程是一组为了完成特定功能的sql语句集,


create or replace


procedure test


as


begin


 过程


end;


--调用


begin


 test;


end;


115、注册Jdbc驱动程序的三种方式

1,Class.forName(“com.oracle.jdbc.Driver”);


2,DriverManger.registerDriver(new com.oracle.jdbc.Driver());


3,System.setProperty(“jdbc.drivers”,”com.oracle.jdbc.Driver”);


116、用JDBC如何调用存储过程

{call过程名[(?,?,,,,)]}返回结果参数的过程的语法为


{?=call过程名[(?,?,,,,)]}


不带参的:{call过程名}


117、JDBC中的PreparedStatement相比Statement的好处

1,相对比较安全,可以防止sql注入


2,有裕编译功能,相同的操作批量数据效率较高


118. 写一个用jdbc连接并访问oracle数据的程序代码



private static final String DRIVER = " com.oracle.jdbc.driver.OracleDriver ";


private static final String URL = "jdbc:oracle:thin:@localhost:1521 =orcl";


private static final String UNAME = "sa";


private static final String PASS = "123";


Class.forName(DRIVER);


conn = DriverManager.getConnection(URL,UNAME,PASS);



119、Class.forName的作用?为什么要用?

Class.forName(“”)返回的是以个类,任何Class都要装载虚拟机上才能运行,class.forName();就是装载类用的,(和NEW不一样,)


用:比如说给你以个字符串(代表以类的包名和类名),要你把他的类加载到虚拟机上的时候就要用到了,


答:调用该访问返回一个以字符串指定类名的类的对象。


120、大数据量下的分页解决方法。

121、用 JDBC 查询学生成绩单, 把主要代码写出来.

Connection getConnection()


{

private static final String DRIVER = " com.orcl.jdbc.Driver ";


private static final String URL = "jdbc:orcl ://localhost:1433;databasename=test";


private static final String UNAME = "sa";


private static final String PASS = "123";


Class.forName("com.orcl.jdbc.Driver");


return java.sql.DriverManager.getConnention(dbURL,dbUser,dbPwd);


}


public Employee getEmployee() throws SQLException {

STUDENT employee = null;


String sql = "SELECT * FROM STUDENT";


Connection conn = null;


PreparedStatement ps = null;


ResultSet rs = null;


try {

conn = dataSource.getConnection();


ps = conn.prepareStatement(sql);


rs = ps.executeQuery();


employee = null;


while (rs.next()) {

employee = new STUDENT ();


employee.stuid (rs.getInt("ID"));



}


} finally {

try {

if (rs != null)


rs.close();


} finally {

try {

if (ps != null)


ps.close();


} finally {

if (conn != null)


conn.close();


}


}


}


return employee;


}


122、这段代码有什么不足之处?

try {

Connection conn = ...;

Statement stmt = ...;


ResultSet rs = stmt.executeQuery("select * from table1");


while(rs.next()) {

}

} catch(Exception ex) {

}


需要异常处理


123、说出数据连接池的工作机制是什么?

J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。



124、为什么要用 ORM?  和 JDBC 有何不一样?

Orm建立java对象与数据库对象之间的映射关系,程序员不需要编写复杂的sql语句,直接操作java对象即可,从而大大降低了代码量,也是程序员更加专注于业务逻辑的实现,


1. 代码繁琐问题,用jdbc访问数据库代码量大繁琐,容易出错,


2. 数据库连接问题,,关系数据对象之间,存在各种关系,,如果程序员用jdbc编程的话,就必须十分小心的处理这些关系,而这个过程是个很痛苦的过程,


3. Orm建立java对象与数据库对象关系映射,也自动根据数据库对象之间的关系创建java对象的关系,并且提供了维持这些关系的完整有效机制


4. 系统架构问题,现在的应用系统一般由展示层,业务层,数据访问层,数据层,各层次功能划分非常清楚,jdbc属于数据访问层,使用jdbc编程时就必须知道后台使用的是什么数据库,有哪些表,哪些字段,表与表之间有什么关系,索引,等等,,使用orm可以完全的屏蔽数据库,给程序员的只有java对象,程序员只需要根据业务逻辑的需要调用java对象,就可以实现对后台的数据库操作


5. 性能问题,jdbc很多时候存在效率地下的问题,orm框架讲根据具体数据库操作需要,会自动的延迟向后台数据库发送sql请求,尽量减少不必要的数据操作请求操作,


相关文章
|
负载均衡 算法 NoSQL
阿里大佬倾情力荐:Java全线成长宝典,从P5到P8一应俱全
前言 对于大部分的程序员来说,清晰地规划自己的职业发展并不是一件容易的事情。作为一个曾经底子比较差,从底层摸爬滚打多年走过来的程序员,在这里分享一下对我帮助很大的一份宝典,希望同行们能快速掌握这些技术,直接弯道超车。 很多程序员不知道学什么?或者说不知道从何学习?今天分享的这份宝典由阿里大佬倾情力荐,Java全线成长宝典,从P5到P8一应俱全。
|
消息中间件 设计模式 缓存
复习这份美团架构师的Java核心面试宝典,我四面阿里拿下offer
怎样才能拿到大厂的offer,没有掌握绝对的技术,那么就要不断的学习 他是如何拿下阿里等大厂的offer的呢,今天分享他的秘密武器,美团资深架构师整理的Java核心知识点,面试时面试官必问的知识点,篇章包括了很多知识点,其中包括了有基础知识、Java集合、JVM、多线程并发、spring原理、微服务、Netty 与RPC 、Kafka、日记、设计模式、Java算法、数据库、Zookeeper、分布式缓存、数据结构等等。
工作五年,一年内我靠这系列java面试宝典从13K到大厂30K
我认为对于面试以及进阶最佳的学习方法莫过于刷题+博客+书籍+总结! 前三者我将淋漓尽致地挥毫于这篇文章中,至于总结要靠个人。实际上越到后面你越会发现面试并不难,其次就是在刷题的过程中有没有去思考,刷题只是次之,这又是一个层次了,这里暂时不提后面再谈。 我总结了一系列大厂面试中常问的面试技术点、深入解析以及答案,将为最近准备面试的各位去大厂保驾护航! 何谓面试?
|
监控 前端开发 Dubbo
Java 工程师必读的避坑宝典
但凡工作过的同学都会亲自经历过或者听过各种故障。 轻则受到批评,重则影响绩效,甚至被罚钱、开除。 那么,作为 Java 工程师,我们该如何尽可能避坑呢,有没有一些经验可以交流分享的呢? 本文,结合自己的经验,谈谈自己的看法。
363 1
Java 工程师必读的避坑宝典
|
设计模式 缓存 算法
阿里逆天级调优方案,内部这套Java性能调优实战宝典,堪称教科书
随着互联网的发展,高可靠、高并发以及降本增效,已成为各大公司面临的现实挑战,性能优化需求愈发迫切,大到分布式系统,小到代码块的算法优化,都已经成为你日常工作中必须要面对的事情。对于开发者而言,性能优化也从加分项变为一个热门技能,缺乏相关知识将很难在面试或工作中脱颖而出
阿里逆天级调优方案,内部这套Java性能调优实战宝典,堪称教科书
|
设计模式 监控 Java
简直人生外挂,直接涨薪25K,跪谢这份Java性能调优实战宝典
从整个软件生命周期的视角去关注与审视软件性能,通过主动式地设计与实现来主导软件性能,这样才能保证软件性能长期保持竞争力。针对这些问题,我结合自己十余年的性能调优开发经验。
|
XML Java 应用服务中间件
java宝典(9)
java宝典(9)
121 0
|
XML 缓存 开发框架
java宝典(8)
java宝典(8)
203 0
|
前端开发 JavaScript 算法
java宝典(6)
java宝典(6)
206 0
|
存储 缓存 算法
java宝典(5)
java宝典(5)
111 0