oracle分页语句
select t1.* from
(select t.*,rownum n from t_user t where rownum<=5)t1
where n>=3
select t2.* from
(select t1.* ,rownum n from t_user t1) t2 where n between 3 and 5;
MySql分页语句
SELECT * FROM t_user LIMIT 0,5;
懒汉饿汉设计模式
//饿汉模式 线程安全 效率比较低
//-----------------------------
public class Singleton{
//定义一个私有的构造方法
private Singleton(){}
//设置属性,实例化自身,添加static final
private static final Singleton single=new Singleton();
//用静态方法返回该类的实例对象
public static Singleton getInstance(){
return single;
}
}
//懒汉模式 非线程安全
//-----------------------
public class Singleton{
private Singleton(){}
private static Singleton single=null;
public static Singleton getInstance(){
if(single==null){
single = new Singleton();
}
return single;
}
}
//懒汉模式 线程安全简单实现 避免多线程
//------------------------------------------
public class Singleton{
private Singleton(){}
private static Singleton single=null;
public static synchronized Singleton getInstance(){
if(single==null){
single=new Singleton();
}
return single;
}
}
//懒汉模式 效率高,线程安全 最佳方案
//---------------------------------------
public class Singleton{
private Singleton(){}
private static volatile Singleton single=null;
public static Singleton getInstance(){
if(single==null){
synchronized(Singleton.class){
if(single==null){
single=new Singleton();
}
}
}
return single;
}
}
线程基础代码
public class MyThread extends Thread{
@Override
public void run() {
for(int i=0;i<3;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
public static void main(String[] args) {
MyThread m1=new MyThread();
m1.start();
MyThread m2=new MyThread();
m2.start();
}
}
public class MyThread1 implements Runnable{
@Override
public void run() {
for(int i=0;i<3;i++){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+":"+i);
}
}
public static void main(String[] args) {
MyThread1 m2 = new MyThread1();
Thread thread1 = new Thread(m2);
Thread thread2 = new Thread(m2);
thread1.start(); thread2.start();
}
}
写出常见的异常(一般面试写出5个就行)
ArithmeticException ClassCastException NoSuchElementException NullPointerException SecurityException
map遍历
public class MapTest {
public static void main(String[] args){
Map map=new HashMap();
map.put("key1", "value1");
map.put("key2", "value2");
for(Iterator it=map.keySet().iterator();it.hasNext();){
Object o=it.next();
System.out.println(o+""+map.get(o));
}
for(Iterator i=map.entrySet().iterator();i.hasNext();){
Entry e=(Entry) i.next();
System.out.println("键"+e.getKey () + "的值为" + e.getValue());
}
}
}
分页思想
数据的结果集合 每页显示3条数据 当前页面是第2页
list<UserBean> list
每页显示的记录数 int pageSize=3 当前页面 int currentPage=2
求第二页的数据时从第几条开始到第几条结束?
开始下标:startIndex = (currentPage-1)*pageSize
结束下标:endIndex=currentPage*pageSize
总记录数:totalCount=list.size()
list集合中的下标是从0开始 list.subList(startIndex,endIndex) 包括startIndex 而不包含endIndex
显示所有数据需要多少页?
int pageCount= (totalCount-1)/pageSize+1
servlet 3.0配置 2.5配置
完成了一个使用注解描述的Servlet程序开发。
使用@WebServlet将一个继承于javax.servlet.http.HttpServlet的类定义为Servlet组件。
@WebServlet有很多的属性:
1、asyncSupported: 声明Servlet是否支持异步操作模式。
2、description: Servlet的描述。
3、displayName: Servlet的显示名称。
4、initParams: Servlet的init参数。
5、name: Servlet的名称。
6、urlPatterns: Servlet的访问URL。
7、value: Servlet的访问URL。
Servlet的访问URL是Servlet的必选属性,可以选择使用urlPatterns或者value定义。
像上面的Servlet3Demo可以描述成@WebServlet(name="Servlet3Demo",value="/Servlet3Demo")。
也定义多个URL访问:
如@WebServlet(name="Servlet3Demo",urlPatterns={"/Servlet3Demo","/Servlet3Demo2"})
或者@WebServlet(name="AnnotationServlet",value={"/Servlet3Demo","/Servlet3Demo2"})
<servlet>
<description></description>
<display-name>Test</display-name>
<servlet-name>Test</servlet-name>
<servlet-class>pers.kp.test.Test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/Test</url-pattern>
</servlet-mapping>
</web-app>
冒泡排序
public class Test01 {
public static void main(String[] args) {
int arr[]=new int[]{1,2,5,3,4};
fun1(arr);
System.out.println(Arrays.toString(arr));
fun2(arr);
System.out.println(Arrays.toString(arr));
}
//[1, 2, 3, 4, 5]
public static void fun1(int[] arr){
int temp;
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[j]<arr[i]){
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
}
//[5, 4, 3, 2, 1]
public static void fun2(int[] arr){
int temp;
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[j]>arr[i]){
temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
}
}
}
}
Servlet json ajax
//Test08Servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List list=new ArrayList();
for(int i=0;i<3;i++){
list.add(i);
}
JSONArray json=new JSONArray(list);
PrintWriter out=response.getWriter();
out.write(json.toString());
out.flush();
out.close();
}
<script type="text/javascript">
function fun(){
//1.获取XMLHttpRequest对象
var xmlhttp = new XMLHttpRequest();
//2.向服务器发出请求
//第一个参数表示请求提交的方法
//第二个参数表示的是请求的地址
//第三个参数表示的是是否是异步处理 true表示异步 false 同步
xmlhttp.open("GET","Test08",true);
xmlhttp.send();
//3.监听请求服务的状态
xmlhttp.onreadystatechange = function(){
//4.判断请求的状态是否成功,响应的数据是否就绪
if(xmlhttp.readyState==4&&xmlhttp.status==200){
//5.获取服务器端发送过来的数据
var data = xmlhttp.responseText;
var d=eval("("+data+")");
for(var i=0;i<d.length;i++){
alert(d[i]);
}
}
};
}
</script>
文件上传
struts2中
导入架包:commons-fileupload-1.3.1.jar commons-io-2.4.jar
jSP页面:引入 <%@taglib uri="/struts-tags" prefix="s" %> 标签库
表单配置:
<s:form action="file_save" namespace="/file" method="post" enctype="multipart/form-data">
<s:textfield name="uploadname" label="用户名"></s:textfield>
<s:file name="img" label="图片"></s:file>
<s:submit value="上传"></s:submit>
</s:form>
Struts2配置中:
<package name="file" extends="struts-default" namespace="/file" strict-method-invocation="false">
<action name="file_*" class="pers.kp.action.UploadAction" method="{1}">
<result name="success">/index.jsp</result>
<result name="input">/front/upload.jsp</result>
<interceptor-ref name="fileUpload">
<param name="maximumSize">104857</param>
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg,</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
</package>
aciton 中:
public class UploadAction extends ActionSupport {
private String uploadname;
private File img;
private String imgFileName;
private String imgContentType;
public String save() throws IOException{
System.out.println(uploadname+"----"+imgFileName+"----"+imgContentType);
File file=new File("/upload/"+imgFileName);
FileUtils.copyFile(img, file);
return this.SUCCESS;
}
省略setget
servlet中
<!--
注意事项:
method:提交方式必须是post提交
enctype:默认属性表示是提交的数据都要进行编码
multipart/form-data:表示提交数据不进行编码(字节码 二进制流数据)
-->
<form method="post" enctype="multipart/form-data" action="TestServlet">
用户名:<input type="text" name="username" /><br />
文件:<input type="file" name="fileName" /><br />
<input type="submit" value="提交" />
</form>
/*
* 表单提交的数据指定的是multipart/form-data(二进制字节码)个数的数据,
* 使用之前常用的获取数据的方式已经不能够获取数据了
*/
/*String username = request.getParameter("username");
System.out.println(username);*/
//设置文件乱码 保存文件 文件名乱码处理
request.setCharacterEncoding("utf-8");
//1.创建对象DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
//2.获取ServletFileUpload对象
ServletFileUpload upload = new ServletFileUpload(factory);
try {
//3.将request中的数据获取,保存到FileItem对象中,返回FileIteam集合
//在表单中一个输入项表示一个FileItem对象
List<FileItem> list = upload.parseRequest(request);
//4.循环遍历集合取出数据
for (FileItem fileItem : list) {
//判断表单中的输入项是否是普通输入项
if(fileItem.isFormField()){
//表示普通输入项
//获取表单中的name属性值
String name = fileItem.getFieldName();
//获取表单提交过来的数据 并设置名字格式 控制台中乱码处理
String value = fileItem.getString("utf-8");
System.out.println(name+", "+value);
}else{
//文件上传
//获取上传文件的文件名称
String fileName = fileItem.getName();
//创建一个文件(与上传的文件名相同文件)
File file = new File("D:\\upload\\"+fileName);
//将FileItem中的数据写入到文件中
fileItem.write(file);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
页面中:
EXCEL文件上传<br>
<s:form action="car_uploadExcel" enctype="multipart/form-data" method="post" namespace="/car">
<s:file name="excel" label="文件"></s:file>
<s:submit value="提交"></s:submit>
</s:form>
struts.xml配置文件中
<package name="car" extends="struts-default" namespace="/car" strict-method-invocation="false">
<action name="car_*" class="pers.kp.action.OwnedVehicleAction" method="{1}">
<result name="query" type="redirectAction">car_query</result>
</action>
</package>
Action中
public String uploadExcel() throws Exception{
System.out.println("文件已上传:"+excel);
carService.readExcel(excel);
return "query";
}
service层中
/**
* 读取Excel文件,并将读取的内容保存到数据库中
*/
public void readExcel(File file) throws Exception{
InputStream in = new FileInputStream(file);
// 1.获取HSSFWorkbook对象
HSSFWorkbook wb = new HSSFWorkbook(in);
// 2.获取读取内容所在的sheet页
HSSFSheet sheet = wb.getSheetAt(0);
System.out.println(sheet.getSheetName());
// 3.获取第一行第一列的内容
// 获取第一行
int lastRow = sheet.getLastRowNum();
List<OwnedVehicle> list = new ArrayList<OwnedVehicle>();
for (int i = 2; i <= lastRow; i++) {
HSSFRow row = sheet.getRow(i);
// 获取对应的单元格
HSSFCell c0 = row.getCell(0);
HSSFCell c1 = row.getCell(1);
HSSFCell c2 = row.getCell(2);
HSSFCell c3 = row.getCell(3);
HSSFCell c4 = row.getCell(4);
OwnedVehicle ow = new OwnedVehicle();
ow.setVehicleId(getValue(c1));
ow.setMemo(getValue(c2));
ow.setModel(getValue(c3));
ow.setLicenseCode(getValue(c4));
list.add(ow);
//性能优化 保存一定数量
if(i % 10 == 0){
// 将数据提交到dao中
dao.readSaveExcel(list);
// 清空集合中的数据
list.clear();
}
}
dao.readSaveExcel(list);
}
//事务处理 保存方法
public void readSaveExcel(List<OwnedVehicle> list) {
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
try {
for (OwnedVehicle ow : list) {
session.save(ow);
}
tx.commit();
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
} finally{
session.close();
}
}
spring mvc中
<form action="work/save" role="form" method="post" enctype="multipart/form-data">
<td>上传附件</td>
<td colspan="3"><input type="file" name="upload"/></td>
<td colspan="3"><input type="file" name="upload"/></td>
@RequestMapping("/save")
public String save(MultipartFile[] upload){
if(upload!=null){
for(MultipartFile file:upload){
if(!file.isEmpty()){
Workattach attach=new Workattach();
String oldname=file.getOriginalFilename();
// 获取旧名字中的后缀
int n=oldname.lastIndexOf(".");
String ext=oldname.substring(n);
//获取新名字
String newname=PrimaryKey.getFileNewName()+ext;
//获取空的文件
File basefile=new File("D:\\upload\\" + newname);
try {
file.transferTo(basefile);
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
}
}
}