精华内容
下载资源
问答
  • 整理收集的一些常用java工具类

    万次阅读 多人点赞 2017-08-20 19:42:14
    整理收集的一些常用java工具类

    1.json转换工具

    package com.taotao.utils;
    
    import java.util.List;
    
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.JavaType;
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    /**
     * json转换工具类
     */
    public class JsonUtils {
    
        // 定义jackson对象
        private static final ObjectMapper MAPPER = new ObjectMapper();
    
        /**
         * 将对象转换成json字符串。
         * <p>Title: pojoToJson</p>
         * <p>Description: </p>
         * @param data
         * @return
         */
        public static String objectToJson(Object data) {
        	try {
    			String string = MAPPER.writeValueAsString(data);
    			return string;
    		} catch (JsonProcessingException e) {
    			e.printStackTrace();
    		}
        	return null;
        }
        
        /**
         * 将json结果集转化为对象
         * 
         * @param jsonData json数据
         * @param clazz 对象中的object类型
         * @return
         */
        public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
            try {
                T t = MAPPER.readValue(jsonData, beanType);
                return t;
            } catch (Exception e) {
            	e.printStackTrace();
            }
            return null;
        }
        
        /**
         * 将json数据转换成pojo对象list
         * <p>Title: jsonToList</p>
         * <p>Description: </p>
         * @param jsonData
         * @param beanType
         * @return
         */
        public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
        	JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
        	try {
        		List<T> list = MAPPER.readValue(jsonData, javaType);
        		return list;
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
        	
        	return null;
        }
        
    }
    

    2.cookie的读写

    package com.taotao.common.utils;
    
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;
    import java.net.URLEncoder;
    
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    /**
     * 
     * Cookie 工具类
     *
     */
    public final class CookieUtils {
    
        /**
         * 得到Cookie的值, 不编码
         * 
         * @param request
         * @param cookieName
         * @return
         */
        public static String getCookieValue(HttpServletRequest request, String cookieName) {
            return getCookieValue(request, cookieName, false);
        }
    
        /**
         * 得到Cookie的值,
         * 
         * @param request
         * @param cookieName
         * @return
         */
        public static String getCookieValue(HttpServletRequest request, String cookieName, boolean isDecoder) {
            Cookie[] cookieList = request.getCookies();
            if (cookieList == null || cookieName == null) {
                return null;
            }
            String retValue = null;
            try {
                for (int i = 0; i < cookieList.length; i++) {
                    if (cookieList[i].getName().equals(cookieName)) {
                        if (isDecoder) {
                            retValue = URLDecoder.decode(cookieList[i].getValue(), "UTF-8");
                        } else {
                            retValue = cookieList[i].getValue();
                        }
                        break;
                    }
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            return retValue;
        }
    
        /**
         * 得到Cookie的值,
         * 
         * @param request
         * @param cookieName
         * @return
         */
        public static String getCookieValue(HttpServletRequest request, String cookieName, String encodeString) {
            Cookie[] cookieList = request.getCookies();
            if (cookieList == null || cookieName == null) {
                return null;
            }
            String retValue = null;
            try {
                for (int i = 0; i < cookieList.length; i++) {
                    if (cookieList[i].getName().equals(cookieName)) {
                        retValue = URLDecoder.decode(cookieList[i].getValue(), encodeString);
                        break;
                    }
                }
            } catch (UnsupportedEncodingException e) {
            	 e.printStackTrace();
            }
            return retValue;
        }
    
        /**
         * 设置Cookie的值 不设置生效时间默认浏览器关闭即失效,也不编码
         */
        public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
                String cookieValue) {
            setCookie(request, response, cookieName, cookieValue, -1);
        }
    
        /**
         * 设置Cookie的值 在指定时间内生效,但不编码
         */
        public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
                String cookieValue, int cookieMaxage) {
            setCookie(request, response, cookieName, cookieValue, cookieMaxage, false);
        }
    
        /**
         * 设置Cookie的值 不设置生效时间,但编码
         */
        public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
                String cookieValue, boolean isEncode) {
            setCookie(request, response, cookieName, cookieValue, -1, isEncode);
        }
    
        /**
         * 设置Cookie的值 在指定时间内生效, 编码参数
         */
        public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
                String cookieValue, int cookieMaxage, boolean isEncode) {
            doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, isEncode);
        }
    
        /**
         * 设置Cookie的值 在指定时间内生效, 编码参数(指定编码)
         */
        public static void setCookie(HttpServletRequest request, HttpServletResponse response, String cookieName,
                String cookieValue, int cookieMaxage, String encodeString) {
            doSetCookie(request, response, cookieName, cookieValue, cookieMaxage, encodeString);
        }
    
        /**
         * 删除Cookie带cookie域名
         */
        public static void deleteCookie(HttpServletRequest request, HttpServletResponse response,
                String cookieName) {
            doSetCookie(request, response, cookieName, "", -1, false);
        }
    
        /**
         * 设置Cookie的值,并使其在指定时间内生效
         * 
         * @param cookieMaxage cookie生效的最大秒数
         */
        private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
                String cookieName, String cookieValue, int cookieMaxage, boolean isEncode) {
            try {
                if (cookieValue == null) {
                    cookieValue = "";
                } else if (isEncode) {
                    cookieValue = URLEncoder.encode(cookieValue, "utf-8");
                }
                Cookie cookie = new Cookie(cookieName, cookieValue);
                if (cookieMaxage > 0)
                    cookie.setMaxAge(cookieMaxage);
                if (null != request) {// 设置域名的cookie
                	String domainName = getDomainName(request);
                	System.out.println(domainName);
                    if (!"localhost".equals(domainName)) {
                    	cookie.setDomain(domainName);
                    }
                }
                cookie.setPath("/");
                response.addCookie(cookie);
            } catch (Exception e) {
            	 e.printStackTrace();
            }
        }
    
        /**
         * 设置Cookie的值,并使其在指定时间内生效
         * 
         * @param cookieMaxage cookie生效的最大秒数
         */
        private static final void doSetCookie(HttpServletRequest request, HttpServletResponse response,
                String cookieName, String cookieValue, int cookieMaxage, String encodeString) {
            try {
                if (cookieValue == null) {
                    cookieValue = "";
                } else {
                    cookieValue = URLEncoder.encode(cookieValue, encodeString);
                }
                Cookie cookie = new Cookie(cookieName, cookieValue);
                if (cookieMaxage > 0)
                    cookie.setMaxAge(cookieMaxage);
                if (null != request) {// 设置域名的cookie
                	String domainName = getDomainName(request);
                	System.out.println(domainName);
                    if (!"localhost".equals(domainName)) {
                    	cookie.setDomain(domainName);
                    }
                }
                cookie.setPath("/");
                response.addCookie(cookie);
            } catch (Exception e) {
            	 e.printStackTrace();
            }
        }
    
        /**
         * 得到cookie的域名
         */
        private static final String getDomainName(HttpServletRequest request) {
            String domainName = null;
    
            String serverName = request.getRequestURL().toString();
            if (serverName == null || serverName.equals("")) {
                domainName = "";
            } else {
                serverName = serverName.toLowerCase();
                serverName = serverName.substring(7);
                final int end = serverName.indexOf("/");
                serverName = serverName.substring(0, end);
                final String[] domains = serverName.split("\\.");
                int len = domains.length;
                if (len > 3) {
                    // www.xxx.com.cn
                    domainName = "." + domains[len - 3] + "." + domains[len - 2] + "." + domains[len - 1];
                } else if (len <= 3 && len > 1) {
                    // xxx.com or xxx.cn
                    domainName = "." + domains[len - 2] + "." + domains[len - 1];
                } else {
                    domainName = serverName;
                }
            }
    
            if (domainName != null && domainName.indexOf(":") > 0) {
                String[] ary = domainName.split("\\:");
                domainName = ary[0];
            }
            return domainName;
        }
    
    }
    

    3.HttpClientUtil    相关包及文档下载

    package com.taotao.utils;
    
    import java.io.IOException;
    import java.net.URI;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.http.NameValuePair;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.utils.URIBuilder;
    import org.apache.http.entity.ContentType;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    public class HttpClientUtil {
    
    	public static String doGet(String url, Map<String, String> param) {
    
    		// 创建Httpclient对象
    		CloseableHttpClient httpclient = HttpClients.createDefault();
    
    		String resultString = "";
    		CloseableHttpResponse response = null;
    		try {
    			// 创建uri
    			URIBuilder builder = new URIBuilder(url);
    			if (param != null) {
    				for (String key : param.keySet()) {
    					builder.addParameter(key, param.get(key));
    				}
    			}
    			URI uri = builder.build();
    
    			// 创建http GET请求
    			HttpGet httpGet = new HttpGet(uri);
    
    			// 执行请求
    			response = httpclient.execute(httpGet);
    			// 判断返回状态是否为200
    			if (response.getStatusLine().getStatusCode() == 200) {
    				resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				if (response != null) {
    					response.close();
    				}
    				httpclient.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    		return resultString;
    	}
    
    	public static String doGet(String url) {
    		return doGet(url, null);
    	}
    
    	public static String doPost(String url, Map<String, String> param) {
    		// 创建Httpclient对象
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    		CloseableHttpResponse response = null;
    		String resultString = "";
    		try {
    			// 创建Http Post请求
    			HttpPost httpPost = new HttpPost(url);
    			// 创建参数列表
    			if (param != null) {
    				List<NameValuePair> paramList = new ArrayList<>();
    				for (String key : param.keySet()) {
    					paramList.add(new BasicNameValuePair(key, param.get(key)));
    				}
    				// 模拟表单
    				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
    				httpPost.setEntity(entity);
    			}
    			// 执行http请求
    			response = httpClient.execute(httpPost);
    			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				response.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    
    		return resultString;
    	}
    
    	public static String doPost(String url) {
    		return doPost(url, null);
    	}
    	
    	public static String doPostJson(String url, String json) {
    		// 创建Httpclient对象
    		CloseableHttpClient httpClient = HttpClients.createDefault();
    		CloseableHttpResponse response = null;
    		String resultString = "";
    		try {
    			// 创建Http Post请求
    			HttpPost httpPost = new HttpPost(url);
    			// 创建请求内容
    			StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
    			httpPost.setEntity(entity);
    			// 执行http请求
    			response = httpClient.execute(httpPost);
    			resultString = EntityUtils.toString(response.getEntity(), "utf-8");
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				response.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    
    		return resultString;
    	}
    }
    

    4.FastDFSClient工具类   相关包以及文档下载

    package cn.itcast.fastdfs.cliennt;
    
    import org.csource.common.NameValuePair;
    import org.csource.fastdfs.ClientGlobal;
    import org.csource.fastdfs.StorageClient1;
    import org.csource.fastdfs.StorageServer;
    import org.csource.fastdfs.TrackerClient;
    import org.csource.fastdfs.TrackerServer;
    
    public class FastDFSClient {
    
    	private TrackerClient trackerClient = null;
    	private TrackerServer trackerServer = null;
    	private StorageServer storageServer = null;
    	private StorageClient1 storageClient = null;
    	
    	public FastDFSClient(String conf) throws Exception {
    		if (conf.contains("classpath:")) {
    			conf = conf.replace("classpath:", this.getClass().getResource("/").getPath());
    		}
    		ClientGlobal.init(conf);
    		trackerClient = new TrackerClient();
    		trackerServer = trackerClient.getConnection();
    		storageServer = null;
    		storageClient = new StorageClient1(trackerServer, storageServer);
    	}
    	
    	/**
    	 * 上传文件方法
    	 * <p>Title: uploadFile</p>
    	 * <p>Description: </p>
    	 * @param fileName 文件全路径
    	 * @param extName 文件扩展名,不包含(.)
    	 * @param metas 文件扩展信息
    	 * @return
    	 * @throws Exception
    	 */
    	public String uploadFile(String fileName, String extName, NameValuePair[] metas) throws Exception {
    		String result = storageClient.upload_file1(fileName, extName, metas);
    		return result;
    	}
    	
    	public String uploadFile(String fileName) throws Exception {
    		return uploadFile(fileName, null, null);
    	}
    	
    	public String uploadFile(String fileName, String extName) throws Exception {
    		return uploadFile(fileName, extName, null);
    	}
    	
    	/**
    	 * 上传文件方法
    	 * <p>Title: uploadFile</p>
    	 * <p>Description: </p>
    	 * @param fileContent 文件的内容,字节数组
    	 * @param extName 文件扩展名
    	 * @param metas 文件扩展信息
    	 * @return
    	 * @throws Exception
    	 */
    	public String uploadFile(byte[] fileContent, String extName, NameValuePair[] metas) throws Exception {
    		
    		String result = storageClient.upload_file1(fileContent, extName, metas);
    		return result;
    	}
    	
    	public String uploadFile(byte[] fileContent) throws Exception {
    		return uploadFile(fileContent, null, null);
    	}
    	
    	public String uploadFile(byte[] fileContent, String extName) throws Exception {
    		return uploadFile(fileContent, extName, null);
    	}
    }
    

    public class FastDFSTest {
    
    	@Test
    	public void testFileUpload() throws Exception {
    		// 1、加载配置文件,配置文件中的内容就是tracker服务的地址。
    		ClientGlobal.init("D:/workspaces-itcast/term197/taotao-manager-web/src/main/resources/resource/client.conf");
    		// 2、创建一个TrackerClient对象。直接new一个。
    		TrackerClient trackerClient = new TrackerClient();
    		// 3、使用TrackerClient对象创建连接,获得一个TrackerServer对象。
    		TrackerServer trackerServer = trackerClient.getConnection();
    		// 4、创建一个StorageServer的引用,值为null
    		StorageServer storageServer = null;
    		// 5、创建一个StorageClient对象,需要两个参数TrackerServer对象、StorageServer的引用
    		StorageClient storageClient = new StorageClient(trackerServer, storageServer);
    		// 6、使用StorageClient对象上传图片。
    		//扩展名不带“.”
    		String[] strings = storageClient.upload_file("D:/Documents/Pictures/images/200811281555127886.jpg", "jpg", null);
    		// 7、返回数组。包含组名和图片的路径。
    		for (String string : strings) {
    			System.out.println(string);
    		}
    	}
    }


    5.获取异常的堆栈信息

    package com.taotao.utils;
    
    import java.io.PrintWriter;
    import java.io.StringWriter;
    
    public class ExceptionUtil {
    
    	/**
    	 * 获取异常的堆栈信息
    	 * 
    	 * @param t
    	 * @return
    	 */
    	public static String getStackTrace(Throwable t) {
    		StringWriter sw = new StringWriter();
    		PrintWriter pw = new PrintWriter(sw);
    
    		try {
    			t.printStackTrace(pw);
    			return sw.toString();
    		} finally {
    			pw.close();
    		}
    	}
    }
    


    6.easyUIDataGrid对象返回值

    package com.taotao.result;
    
    import java.util.List;
    
    /**
     * easyUIDataGrid对象返回值
     * <p>Title: EasyUIResult</p>
     * <p>Description: </p>
     * <p>Company: www.itcast.com</p> 
     * @author	入云龙
     * @date	2015年7月21日下午4:12:52
     * @version 1.0
     */
    public class EasyUIResult {
    
    	private Integer total;
    	
    	private List<?> rows;
    	
    	public EasyUIResult(Integer total, List<?> rows) {
    		this.total = total;
    		this.rows = rows;
    	}
    	
    	public EasyUIResult(long total, List<?> rows) {
    		this.total = (int) total;
    		this.rows = rows;
    	}
    
    	public Integer getTotal() {
    		return total;
    	}
    	public void setTotal(Integer total) {
    		this.total = total;
    	}
    	public List<?> getRows() {
    		return rows;
    	}
    	public void setRows(List<?> rows) {
    		this.rows = rows;
    	}
    	
    	
    }
    

    7.ftp上传下载工具类

    package com.taotao.utils;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    import org.apache.commons.net.ftp.FTP;
    import org.apache.commons.net.ftp.FTPClient;
    import org.apache.commons.net.ftp.FTPFile;
    import org.apache.commons.net.ftp.FTPReply;
    
    /**
     * ftp上传下载工具类
     * <p>Title: FtpUtil</p>
     * <p>Description: </p>
     * <p>Company: www.itcast.com</p> 
     * @author	入云龙
     * @date	2015年7月29日下午8:11:51
     * @version 1.0
     */
    public class FtpUtil {
    
    	/** 
    	 * Description: 向FTP服务器上传文件 
    	 * @param host FTP服务器hostname 
    	 * @param port FTP服务器端口 
    	 * @param username FTP登录账号 
    	 * @param password FTP登录密码 
    	 * @param basePath FTP服务器基础目录
    	 * @param filePath FTP服务器文件存放路径。例如分日期存放:/2015/01/01。文件的路径为basePath+filePath
    	 * @param filename 上传到FTP服务器上的文件名 
    	 * @param input 输入流 
    	 * @return 成功返回true,否则返回false 
    	 */  
    	public static boolean uploadFile(String host, int port, String username, String password, String basePath,
    			String filePath, String filename, InputStream input) {
    		boolean result = false;
    		FTPClient ftp = new FTPClient();
    		try {
    			int reply;
    			ftp.connect(host, port);// 连接FTP服务器
    			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
    			ftp.login(username, password);// 登录
    			reply = ftp.getReplyCode();
    			if (!FTPReply.isPositiveCompletion(reply)) {
    				ftp.disconnect();
    				return result;
    			}
    			//切换到上传目录
    			if (!ftp.changeWorkingDirectory(basePath+filePath)) {
    				//如果目录不存在创建目录
    				String[] dirs = filePath.split("/");
    				String tempPath = basePath;
    				for (String dir : dirs) {
    					if (null == dir || "".equals(dir)) continue;
    					tempPath += "/" + dir;
    					if (!ftp.changeWorkingDirectory(tempPath)) {
    						if (!ftp.makeDirectory(tempPath)) {
    							return result;
    						} else {
    							ftp.changeWorkingDirectory(tempPath);
    						}
    					}
    				}
    			}
    			//设置上传文件的类型为二进制类型
    			ftp.setFileType(FTP.BINARY_FILE_TYPE);
    			//上传文件
    			if (!ftp.storeFile(filename, input)) {
    				return result;
    			}
    			input.close();
    			ftp.logout();
    			result = true;
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (ftp.isConnected()) {
    				try {
    					ftp.disconnect();
    				} catch (IOException ioe) {
    				}
    			}
    		}
    		return result;
    	}
    	
    	/** 
    	 * Description: 从FTP服务器下载文件 
    	 * @param host FTP服务器hostname 
    	 * @param port FTP服务器端口 
    	 * @param username FTP登录账号 
    	 * @param password FTP登录密码 
    	 * @param remotePath FTP服务器上的相对路径 
    	 * @param fileName 要下载的文件名 
    	 * @param localPath 下载后保存到本地的路径 
    	 * @return 
    	 */  
    	public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
    			String fileName, String localPath) {
    		boolean result = false;
    		FTPClient ftp = new FTPClient();
    		try {
    			int reply;
    			ftp.connect(host, port);
    			// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
    			ftp.login(username, password);// 登录
    			reply = ftp.getReplyCode();
    			if (!FTPReply.isPositiveCompletion(reply)) {
    				ftp.disconnect();
    				return result;
    			}
    			ftp.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
    			FTPFile[] fs = ftp.listFiles();
    			for (FTPFile ff : fs) {
    				if (ff.getName().equals(fileName)) {
    					File localFile = new File(localPath + "/" + ff.getName());
    
    					OutputStream is = new FileOutputStream(localFile);
    					ftp.retrieveFile(ff.getName(), is);
    					is.close();
    				}
    			}
    
    			ftp.logout();
    			result = true;
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (ftp.isConnected()) {
    				try {
    					ftp.disconnect();
    				} catch (IOException ioe) {
    				}
    			}
    		}
    		return result;
    	}
    	
    	public static void main(String[] args) {
    		try {  
    	        FileInputStream in=new FileInputStream(new File("D:\\temp\\image\\gaigeming.jpg"));  
    	        boolean flag = uploadFile("192.168.25.133", 21, "ftpuser", "ftpuser", "/home/ftpuser/www/images","/2015/01/21", "gaigeming.jpg", in);  
    	        System.out.println(flag);  
    	    } catch (FileNotFoundException e) {  
    	        e.printStackTrace();  
    	    }  
    	}
    }
    

    8.各种id生成策略

    package com.taotao.utils;
    
    import java.util.Random;
    
    /**
     * 各种id生成策略
     * <p>Title: IDUtils</p>
     * <p>Description: </p>
     * @date	2015年7月22日下午2:32:10
     * @version 1.0
     */
    public class IDUtils {
    
    	/**
    	 * 图片名生成
    	 */
    	public static String genImageName() {
    		//取当前时间的长整形值包含毫秒
    		long millis = System.currentTimeMillis();
    		//long millis = System.nanoTime();
    		//加上三位随机数
    		Random random = new Random();
    		int end3 = random.nextInt(999);
    		//如果不足三位前面补0
    		String str = millis + String.format("%03d", end3);
    		
    		return str;
    	}
    	
    	/**
    	 * 商品id生成
    	 */
    	public static long genItemId() {
    		//取当前时间的长整形值包含毫秒
    		long millis = System.currentTimeMillis();
    		//long millis = System.nanoTime();
    		//加上两位随机数
    		Random random = new Random();
    		int end2 = random.nextInt(99);
    		//如果不足两位前面补0
    		String str = millis + String.format("%02d", end2);
    		long id = new Long(str);
    		return id;
    	}
    	
    	public static void main(String[] args) {
    		for(int i=0;i< 100;i++)
    		System.out.println(genItemId());
    	}
    }
    

    9.上传图片返回值

    package com.result;
    /**
     * 上传图片返回值
     * <p>Title: PictureResult</p>
     * <p>Description: </p>
     * <p>Company: www.itcast.com</p> 
     * @author	入云龙
     * @date	2015年7月22日下午2:09:02
     * @version 1.0
     */
    public class PictureResult {
    
    	/**
    	 * 上传图片返回值,成功:0	失败:1	
    	 */
    	private Integer error;
    	/**
    	 * 回显图片使用的url
    	 */
    	private String url;
    	/**
    	 * 错误时的错误消息
    	 */
    	private String message;
    	public PictureResult(Integer state, String url) {
    		this.url = url;
    		this.error = state;
    	}
    	public PictureResult(Integer state, String url, String errorMessage) {
    		this.url = url;
    		this.error = state;
    		this.message = errorMessage;
    	}
    	public Integer getError() {
    		return error;
    	}
    	public void setError(Integer error) {
    		this.error = error;
    	}
    	public String getUrl() {
    		return url;
    	}
    	public void setUrl(String url) {
    		this.url = url;
    	}
    	public String getMessage() {
    		return message;
    	}
    	public void setMessage(String message) {
    		this.message = message;
    	}
    	
    }
    

    10.自定义响应结构

    package com.result;
    
    import java.util.List;
    
    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    
    /**
     * 自定义响应结构
     */
    public class TaotaoResult {
    
        // 定义jackson对象
        private static final ObjectMapper MAPPER = new ObjectMapper();
    
        // 响应业务状态
        private Integer status;
    
        // 响应消息
        private String msg;
    
        // 响应中的数据
        private Object data;
    
        public static TaotaoResult build(Integer status, String msg, Object data) {
            return new TaotaoResult(status, msg, data);
        }
    
        public static TaotaoResult ok(Object data) {
            return new TaotaoResult(data);
        }
    
        public static TaotaoResult ok() {
            return new TaotaoResult(null);
        }
    
        public TaotaoResult() {
    
        }
    
        public static TaotaoResult build(Integer status, String msg) {
            return new TaotaoResult(status, msg, null);
        }
    
        public TaotaoResult(Integer status, String msg, Object data) {
            this.status = status;
            this.msg = msg;
            this.data = data;
        }
    
        public TaotaoResult(Object data) {
            this.status = 200;
            this.msg = "OK";
            this.data = data;
        }
    
    //    public Boolean isOK() {
    //        return this.status == 200;
    //    }
    
        public Integer getStatus() {
            return status;
        }
    
        public void setStatus(Integer status) {
            this.status = status;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public Object getData() {
            return data;
        }
    
        public void setData(Object data) {
            this.data = data;
        }
    
        /**
         * 将json结果集转化为TaotaoResult对象
         * 
         * @param jsonData json数据
         * @param clazz TaotaoResult中的object类型
         * @return
         */
        public static TaotaoResult formatToPojo(String jsonData, Class<?> clazz) {
            try {
                if (clazz == null) {
                    return MAPPER.readValue(jsonData, TaotaoResult.class);
                }
                JsonNode jsonNode = MAPPER.readTree(jsonData);
                JsonNode data = jsonNode.get("data");
                Object obj = null;
                if (clazz != null) {
                    if (data.isObject()) {
                        obj = MAPPER.readValue(data.traverse(), clazz);
                    } else if (data.isTextual()) {
                        obj = MAPPER.readValue(data.asText(), clazz);
                    }
                }
                return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
            } catch (Exception e) {
                return null;
            }
        }
    
        /**
         * 没有object对象的转化
         * 
         * @param json
         * @return
         */
        public static TaotaoResult format(String json) {
            try {
                return MAPPER.readValue(json, TaotaoResult.class);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * Object是集合转化
         * 
         * @param jsonData json数据
         * @param clazz 集合中的类型
         * @return
         */
        public static TaotaoResult formatToList(String jsonData, Class<?> clazz) {
            try {
                JsonNode jsonNode = MAPPER.readTree(jsonData);
                JsonNode data = jsonNode.get("data");
                Object obj = null;
                if (data.isArray() && data.size() > 0) {
                    obj = MAPPER.readValue(data.traverse(),
                            MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
                }
                return build(jsonNode.get("status").intValue(), jsonNode.get("msg").asText(), obj);
            } catch (Exception e) {
                return null;
            }
        }
    
    }
    

    11.jedis操作

    package com.taotao.jedis;
    
    public interface JedisClient {
    
    	String set(String key, String value);
    	String get(String key);
    	Boolean exists(String key);
    	Long expire(String key, int seconds);
    	Long ttl(String key);
    	Long incr(String key);
    	Long hset(String key, String field, String value);
    	String hget(String key, String field);
    	Long hdel(String key, String... field);
    }
    
    package com.taotao.jedis;
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    import redis.clients.jedis.JedisCluster;
    
    public class JedisClientCluster implements JedisClient {
    	
    	@Autowired
    	private JedisCluster jedisCluster;
    
    	@Override
    	public String set(String key, String value) {
    		return jedisCluster.set(key, value);
    	}
    
    	@Override
    	public String get(String key) {
    		return jedisCluster.get(key);
    	}
    
    	@Override
    	public Boolean exists(String key) {
    		return jedisCluster.exists(key);
    	}
    
    	@Override
    	public Long expire(String key, int seconds) {
    		return jedisCluster.expire(key, seconds);
    	}
    
    	@Override
    	public Long ttl(String key) {
    		return jedisCluster.ttl(key);
    	}
    
    	@Override
    	public Long incr(String key) {
    		return jedisCluster.incr(key);
    	}
    
    	@Override
    	public Long hset(String key, String field, String value) {
    		return jedisCluster.hset(key, field, value);
    	}
    
    	@Override
    	public String hget(String key, String field) {
    		return jedisCluster.hget(key, field);
    	}
    
    	@Override
    	public Long hdel(String key, String... field) {
    		return jedisCluster.hdel(key, field);
    	}
    
    }
    

    package com.taotao.jedis;
    
    
    import org.springframework.beans.factory.annotation.Autowired;
    
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPool;
    
    
    public class JedisClientPool implements JedisClient {
    	
    	@Autowired
    	private JedisPool jedisPool;
    
    
    	@Override
    	public String set(String key, String value) {
    		Jedis jedis = jedisPool.getResource();
    		String result = jedis.set(key, value);
    		jedis.close();
    		return result;
    	}
    
    
    	@Override
    	public String get(String key) {
    		Jedis jedis = jedisPool.getResource();
    		String result = jedis.get(key);
    		jedis.close();
    		return result;
    	}
    
    
    	@Override
    	public Boolean exists(String key) {
    		Jedis jedis = jedisPool.getResource();
    		Boolean result = jedis.exists(key);
    		jedis.close();
    		return result;
    	}
    
    
    	@Override
    	public Long expire(String key, int seconds) {
    		Jedis jedis = jedisPool.getResource();
    		Long result = jedis.expire(key, seconds);
    		jedis.close();
    		return result;
    	}
    
    
    	@Override
    	public Long ttl(String key) {
    		Jedis jedis = jedisPool.getResource();
    		Long result = jedis.ttl(key);
    		jedis.close();
    		return result;
    	}
    
    
    	@Override
    	public Long incr(String key) {
    		Jedis jedis = jedisPool.getResource();
    		Long result = jedis.incr(key);
    		jedis.close();
    		return result;
    	}
    
    
    	@Override
    	public Long hset(String key, String field, String value) {
    		Jedis jedis = jedisPool.getResource();
    		Long result = jedis.hset(key, field, value);
    		jedis.close();
    		return result;
    	}
    
    
    	@Override
    	public String hget(String key, String field) {
    		Jedis jedis = jedisPool.getResource();
    		String result = jedis.hget(key, field);
    		jedis.close();
    		return result;
    	}
    
    
    	@Override
    	public Long hdel(String key, String... field) {
    		Jedis jedis = jedisPool.getResource();
    		Long result = jedis.hdel(key, field);
    		jedis.close();
    		return result;
    	}
    
    
    }
    
    
    

    12.待续







    展开全文
  • JUC五种常见同步工具类总结

    千次阅读 2018-06-09 19:46:10
    JUC常用工具类 Semaphore CountDownLatch CyclicBarrier Exchanger Phaser 使用场景 这五种同步辅助类适用于的同步场景: Semaphore 信号量是一类经典的同步工具。信号量通常用来限制线程可以同时访问的...

    JUC常用工具类

    • Semaphore
    • CountDownLatch
    • CyclicBarrier
    • Exchanger
    • Phaser

    使用场景

    这五种同步辅助类适用于的同步场景:

    1. Semaphore 信号量是一类经典的同步工具。信号量通常用来限制线程可以同时访问的(物理或逻辑)资源数量。

    2. CountDownLatch 一种非常简单、但很常用的同步辅助类。其作用是在完成一组正在其他线程中执行的操作之前,允许一个或多个线程一直阻塞。

    3. CyclicBarrier 一种可重置的多路同步点,在某些并发编程场景很有用。它允许一组线程互相等待,直到到达某个公共的屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier在释放等待线程后可以重用,所以称它为循环的barrier。

    4. Phaser一种可重用的同步屏障,功能上类似于CyclicBarrier和CountDownLatch,但使用上更为灵活。非常适用于在多线程环境下同步协调分阶段计算任务(Fork/Join框架中的子任务之间需同步时,优先使用Phaser)

    5. Exchanger允许两个线程在某个汇合点交换对象,在某些管道设计时比较有用。Exchanger提供了一个同步点,在这个同步点,一对线程可以交换数据。每个线程通过exchange()方法的入口提供数据给他的伙伴线程,并接收他的伙伴线程提供的数据并返回。当两个线程通过Exchanger交换了对象,这个交换对于两个线程来说都是安全的。Exchanger可以认为是 SynchronousQueue 的双向形式,在运用到遗传算法和管道设计的应用中比较有用。

    【参考资料】

    https://www.jianshu.com/p/a101ae9797e3

    展开全文
  • JAVA常用的16个工具类

    千次阅读 多人点赞 2019-04-16 09:34:33
    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。 1 org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在...

    目录

    1 org.apache.commons.io.IOUtils

    2 org.apache.commons.io.FileUtils

    3 org.apache.commons.lang.StringUtils

    4 org.apache.http.util.EntityUtils

    5 org.apache.commons.lang3.StringUtils

    6 org.apache.commons.io.FilenameUtils

    7 org.springframework.util.StringUtils

    8 org.apache.commons.lang.ArrayUtils

    9 org.apache.commons.lang.StringEscapeUtils

    10 org.apache.http.client.utils.URLEncodedUtils

    11 org.apache.commons.codec.digest.DigestUtils

    12 org.apache.commons.collections.CollectionUtils

    13 org.apache.commons.lang3.ArrayUtils

    14 org.apache.commons.beanutils.PropertyUtils

    15 org.apache.commons.lang3.StringEscapeUtils(废弃)

    16 org.apache.commons.beanutils.BeanUtils


    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。

    1 org.apache.commons.io.IOUtils

    closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块
    toString:转换IO流、 Uri、 byte[]为String
    copy:IO流数据复制,从输入流写到输出流中,最大支持2GB
    toByteArray:从输入流、URI获取byte[]
    write:把字节. 字符等写入输出流
    toInputStream:把字符转换为输入流
    readLines:从输入流中读取多行数据,返回List<String>
    copyLarge:同copy,支持2GB以上数据的复制
    lineIterator:从输入流返回一个迭代器,根据参数要求读取的数据量,全部读取,如果数据不够,则失败

    2 org.apache.commons.io.FileUtils

    deleteDirectory:删除文件夹
    readFileToString:以字符形式读取文件内容
    deleteQueitly:删除文件或文件夹且不会抛出异常
    copyFile:复制文件
    writeStringToFile:把字符写到目标文件,如果文件不存在,则创建
    forceMkdir:强制创建文件夹,如果该文件夹父级目录不存在,则创建父级
    write:把字符写到指定文件中
    listFiles:列举某个目录下的文件(根据过滤器)
    copyDirectory:复制文件夹
    forceDelete:强制删除文件

    3 org.apache.commons.lang.StringUtils

    isBlank:字符串是否为空 (trim后判断)
    isEmpty:字符串是否为空 (不trim并判断)
    equals:字符串是否相等
    join:合并数组为单一字符串,可传分隔符
    split:分割字符串
    EMPTY:返回空字符串
    trimToNull:trim后为空字符串则转换为null
    replace:替换字符串

    4 org.apache.http.util.EntityUtils

    toString:把Entity转换为字符串
    consume:确保Entity中的内容全部被消费。可以看到源码里又一次消费了Entity的内容,假如用户没有消费,那调用Entity时候将会把它消费掉
    toByteArray:把Entity转换为字节流
    consumeQuietly:和consume一样,但不抛异常
    getContentCharset:获取内容的编码

    5 org.apache.commons.lang3.StringUtils

    isBlank:字符串是否为空 (trim后判断)
    isEmpty:字符串是否为空 (不trim并判断)
    equals:字符串是否相等
    join:合并数组为单一字符串,可传分隔符
    split:分割字符串
    EMPTY:返回空字符串
    replace:替换字符串
    capitalize:首字符大写

    6 org.apache.commons.io.FilenameUtils

    getExtension:返回文件后缀名
    getBaseName:返回文件名,不包含后缀名
    getName:返回文件全名
    concat:按命令行风格组合文件路径(详见方法注释)
    removeExtension:删除后缀名
    normalize:使路径正常化
    wildcardMatch:匹配通配符
    seperatorToUnix:路径分隔符改成unix系统格式的,即/
    getFullPath:获取文件路径,不包括文件名
    isExtension:检查文件后缀名是不是传入参数(List<String>)中的一个

    7 org.springframework.util.StringUtils

    hasText:检查字符串中是否包含文本
    hasLength:检测字符串是否长度大于0
    isEmpty:检测字符串是否为空(若传入为对象,则判断对象是否为null)
    commaDelimitedStringToArray:逗号分隔的String转换为数组
    collectionToDelimitedString:把集合转为CSV格式字符串
    replace 替换字符串
    7. delimitedListToStringArray:相当于split
    uncapitalize:首字母小写
    collectionToDelimitedCommaString:把集合转为CSV格式字符串
    tokenizeToStringArray:和split基本一样,但能自动去掉空白的单词

    8 org.apache.commons.lang.ArrayUtils

    contains:是否包含某字符串
    addAll:添加整个数组
    clone:克隆一个数组
    isEmpty:是否空数组
    add:向数组添加元素
    subarray:截取数组
    indexOf:查找某个元素的下标
    isEquals:比较数组是否相等
    toObject:基础类型数据数组转换为对应的Object数组

    9 org.apache.commons.lang.StringEscapeUtils

    参考十五:org.apache.commons.lang3.StringEscapeUtils

    10 org.apache.http.client.utils.URLEncodedUtils

    format:格式化参数,返回一个HTTP POST或者HTTP PUT可用application/x-www-form-urlencoded字符串
    parse:把String或者URI等转换为List<NameValuePair>

    11 org.apache.commons.codec.digest.DigestUtils

    md5Hex:MD5加密,返回32位字符串
    sha1Hex:SHA-1加密
    sha256Hex:SHA-256加密
    sha512Hex:SHA-512加密
    md5:MD5加密,返回16位字符串

    12 org.apache.commons.collections.CollectionUtils

    isEmpty:是否为空
    select:根据条件筛选集合元素
    transform:根据指定方法处理集合元素,类似List的map()
    filter:过滤元素,雷瑟List的filter()
    find:基本和select一样
    collect:和transform 差不多一样,但是返回新数组
    forAllDo:调用每个元素的指定方法
    isEqualCollection:判断两个集合是否一致

    13 org.apache.commons.lang3.ArrayUtils

    contains:是否包含某个字符串
    addAll:添加整个数组
    clone:克隆一个数组
    isEmpty:是否空数组
    add:向数组添加元素
    subarray:截取数组
    indexOf:查找某个元素的下标
    isEquals:比较数组是否相等
    toObject:基础类型数据数组转换为对应的Object数组

    14 org.apache.commons.beanutils.PropertyUtils

    getProperty:获取对象属性值
    setProperty:设置对象属性值
    getPropertyDiscriptor:获取属性描述器
    isReadable:检查属性是否可访问
    copyProperties:复制属性值,从一个对象到另一个对象
    getPropertyDiscriptors:获取所有属性描述器
    isWriteable:检查属性是否可写
    getPropertyType:获取对象属性类型

    15 org.apache.commons.lang3.StringEscapeUtils(废弃)

    unescapeHtml4:转义html
    escapeHtml4:反转义html
    escapeXml:转义xml
    unescapeXml:反转义xml
    escapeJava:转义unicode编码
    escapeEcmaScript:转义EcmaScript字符
    unescapeJava:反转义unicode编码
    escapeJson:转义json字符
    escapeXml10:转义Xml10

    这个现在已经废弃了,建议使用commons-text包里面的方法。

    16 org.apache.commons.beanutils.BeanUtils

    copyPeoperties:复制属性值,从一个对象到另一个对象
    getProperty:获取对象属性值
    setProperty:设置对象属性值
    populate:根据Map给属性复制
    copyPeoperty:复制单个值,从一个对象到另一个对象
    cloneBean:克隆bean实例

    现在你只要了解了以上16种最流行的工具类方法,你就不必要再自己写工具类了,不必重复造轮子。

    另外,工具类,根据阿里开发手册,包名如果要使用util不能带s,工具类命名为XxxUtils

     

    展开全文
  • 2020最新Java常见面试题及答案

    万次阅读 多人点赞 2019-10-26 15:53:35
    Java最新常见面试题 + 答案汇总 1、面试题模块汇总 面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、...

    Java最新常见面试题 + 答案汇总

    1、面试题模块汇总
    面试题包括以下十九个模块:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM 。如下图所示:
    在这里插入图片描述
    可能对于初学者不需要后面的框架和 JVM 模块的知识,读者朋友们可根据自己的情况,选择对应的模块进行阅读。
    适宜阅读人群
    需要面试的初/中/高级 java 程序员
    想要查漏补缺的人
    想要不断完善和扩充自己 java 技术栈的人
    java 面试官
    具体面试题
    下面一起来看 208 道面试题,具体的内容。

    一、Java 基础

    1.JDK 和 JRE 有什么区别?

    2.== 和 equals 的区别是什么?

    3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

    4.final 在 java 中有什么作用?

    5.java 中的 Math.round(-1.5) 等于多少?

    6.String 属于基础的数据类型吗?

    7.java 中操作字符串都有哪些类?它们之间有什么区别?

    8.String str="i"与 String str=new String(“i”)一样吗?

    9.如何将字符串反转?

    10.String 类的常用方法都有那些?

    11.抽象类必须要有抽象方法吗?

    12.普通类和抽象类有哪些区别?

    13.抽象类能使用 final 修饰吗?

    14.接口和抽象类有什么区别?

    15.java 中 IO 流分为几种?

    16.BIO、NIO、AIO 有什么区别?

    17.Files的常用方法都有哪些?

    二、容器

    18.java 容器都有哪些?

    19.Collection 和 Collections 有什么区别?

    20.List、Set、Map 之间的区别是什么?

    21.HashMap 和 Hashtable 有什么区别?

    22.如何决定使用 HashMap 还是 TreeMap?

    23.说一下 HashMap 的实现原理?

    24.说一下 HashSet 的实现原理?

    25.ArrayList 和 LinkedList 的区别是什么?

    26.如何实现数组和 List 之间的转换?

    27.ArrayList 和 Vector 的区别是什么?

    28.Array 和 ArrayList 有何区别?

    29.在 Queue 中 poll()和 remove()有什么区别?

    30.哪些集合类是线程安全的?

    31.迭代器 Iterator 是什么?

    32.Iterator 怎么使用?有什么特点?

    33.Iterator 和 ListIterator 有什么区别?

    34.怎么确保一个集合不能被修改?

    三、多线程

    35.并行和并发有什么区别?

    36.线程和进程的区别?

    37.守护线程是什么?

    38.创建线程有哪几种方式?

    39.说一下 runnable 和 callable 有什么区别?

    40.线程有哪些状态?

    41.sleep() 和 wait() 有什么区别?

    42.notify()和 notifyAll()有什么区别?

    43.线程的 run()和 start()有什么区别?

    44.创建线程池有哪几种方式?

    45.线程池都有哪些状态?

    46.线程池中 submit()和 execute()方法有什么区别?

    47.在 java 程序中怎么保证多线程的运行安全?

    48.多线程锁的升级原理是什么?

    49.什么是死锁?

    50.怎么防止死锁?

    51.ThreadLocal 是什么?有哪些使用场景?

    52.说一下 synchronized 底层实现原理?

    53.synchronized 和 volatile 的区别是什么?

    54.synchronized 和 Lock 有什么区别?

    55.synchronized 和 ReentrantLock 区别是什么?

    56.说一下 atomic 的原理?

    四、反射

    57.什么是反射?

    58.什么是 java 序列化?什么情况下需要序列化?

    59.动态代理是什么?有哪些应用?

    60.怎么实现动态代理?

    五、对象拷贝

    61.为什么要使用克隆?

    62.如何实现对象克隆?

    63.深拷贝和浅拷贝区别是什么?

    六、Java Web

    64.jsp 和 servlet 有什么区别?

    65.jsp 有哪些内置对象?作用分别是什么?

    66.说一下 jsp 的 4 种作用域?

    67.session 和 cookie 有什么区别?

    68.说一下 session 的工作原理?

    69.如果客户端禁止 cookie 能实现 session 还能用吗?

    70.spring mvc 和 struts 的区别是什么?

    71.如何避免 sql 注入?

    72.什么是 XSS 攻击,如何避免?

    73.什么是 CSRF 攻击,如何避免?

    七、异常

    74.throw 和 throws 的区别?

    75.final、finally、finalize 有什么区别?

    76.try-catch-finally 中哪个部分可以省略?

    77.try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?

    78.常见的异常类有哪些?

    八、网络

    79.http 响应码 301 和 302 代表的是什么?有什么区别?

    80.forward 和 redirect 的区别?

    81.简述 tcp 和 udp的区别?

    82.tcp 为什么要三次握手,两次不行吗?为什么?

    83.说一下 tcp 粘包是怎么产生的?

    84.OSI 的七层模型都有哪些?

    85.get 和 post 请求有哪些区别?

    86.如何实现跨域?

    87.说一下 JSONP 实现原理?

    九、设计模式

    88.说一下你熟悉的设计模式?

    89.简单工厂和抽象工厂有什么区别?

    十、Spring/Spring MVC

    90.为什么要使用 spring?

    91.解释一下什么是 aop?

    92.解释一下什么是 ioc?

    93.spring 有哪些主要模块?

    94.spring 常用的注入方式有哪些?

    95.spring 中的 bean 是线程安全的吗?

    96.spring 支持几种 bean 的作用域?

    97.spring 自动装配 bean 有哪些方式?

    98.spring 事务实现方式有哪些?

    99.说一下 spring 的事务隔离?

    100.说一下 spring mvc 运行流程?

    101.spring mvc 有哪些组件?

    102.@RequestMapping 的作用是什么?

    103.@Autowired 的作用是什么?

    十一、Spring Boot/Spring Cloud

    104.什么是 spring boot?

    105.为什么要用 spring boot?

    106.spring boot 核心配置文件是什么?

    107.spring boot 配置文件有哪几种类型?它们有什么区别?

    108.spring boot 有哪些方式可以实现热部署?

    109.jpa 和 hibernate 有什么区别?

    110.什么是 spring cloud?

    111.spring cloud 断路器的作用是什么?

    112.spring cloud 的核心组件有哪些?

    十二、Hibernate

    113.为什么要使用 hibernate?

    114.什么是 ORM 框架?

    115.hibernate 中如何在控制台查看打印的 sql 语句?

    116.hibernate 有几种查询方式?

    117.hibernate 实体类可以被定义为 final 吗?

    118.在 hibernate 中使用 Integer 和 int 做映射有什么区别?

    119.hibernate 是如何工作的?

    120.get()和 load()的区别?

    121.说一下 hibernate 的缓存机制?

    122.hibernate 对象有哪些状态?

    123.在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?

    124.hibernate 实体类必须要有无参构造函数吗?为什么?

    十三、Mybatis

    125.mybatis 中 #{}和 ${}的区别是什么?

    126.mybatis 有几种分页方式?

    127.RowBounds 是一次性查询全部结果吗?为什么?

    128.mybatis 逻辑分页和物理分页的区别是什么?

    129.mybatis 是否支持延迟加载?延迟加载的原理是什么?

    130.说一下 mybatis 的一级缓存和二级缓存?

    131.mybatis 和 hibernate 的区别有哪些?

    132.mybatis 有哪些执行器(Executor)?

    133.mybatis 分页插件的实现原理是什么?

    134.mybatis 如何编写一个自定义插件?

    十四、RabbitMQ

    135.rabbitmq 的使用场景有哪些?

    136.rabbitmq 有哪些重要的角色?

    137.rabbitmq 有哪些重要的组件?

    138.rabbitmq 中 vhost 的作用是什么?

    139.rabbitmq 的消息是怎么发送的?

    140.rabbitmq 怎么保证消息的稳定性?

    141.rabbitmq 怎么避免消息丢失?

    142.要保证消息持久化成功的条件有哪些?

    143.rabbitmq 持久化有什么缺点?

    144.rabbitmq 有几种广播类型?

    145.rabbitmq 怎么实现延迟消息队列?

    146.rabbitmq 集群有什么用?

    147.rabbitmq 节点的类型有哪些?

    148.rabbitmq 集群搭建需要注意哪些问题?

    149.rabbitmq 每个节点是其他节点的完整拷贝吗?为什么?

    150.rabbitmq 集群中唯一一个磁盘节点崩溃了会发生什么情况?

    151.rabbitmq 对集群节点停止顺序有要求吗?

    十五、Kafka

    152.kafka 可以脱离 zookeeper 单独使用吗?为什么?

    153.kafka 有几种数据保留的策略?

    154.kafka 同时设置了 7 天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?

    155.什么情况会导致 kafka 运行变慢?

    156.使用 kafka 集群需要注意什么?

    十六、Zookeeper

    157.zookeeper 是什么?

    158.zookeeper 都有哪些功能?

    159.zookeeper 有几种部署模式?

    160.zookeeper 怎么保证主从节点的状态同步?

    161.集群中为什么要有主节点?

    162.集群中有 3 台服务器,其中一个节点宕机,这个时候 zookeeper 还可以使用吗?

    163.说一下 zookeeper 的通知机制?

    十七、MySql

    164.数据库的三范式是什么?

    165.一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?

    166.如何获取当前数据库版本?

    167.说一下 ACID 是什么?

    168.char 和 varchar 的区别是什么?

    169.float 和 double 的区别是什么?

    170.mysql 的内连接、左连接、右连接有什么区别?

    171.mysql 索引是怎么实现的?

    172.怎么验证 mysql 的索引是否满足需求?

    173.说一下数据库的事务隔离?

    174.说一下 mysql 常用的引擎?

    175.说一下 mysql 的行锁和表锁?

    176.说一下乐观锁和悲观锁?

    177.mysql 问题排查都有哪些手段?

    178.如何做 mysql 的性能优化?

    十八、Redis

    179.redis 是什么?都有哪些使用场景?

    180.redis 有哪些功能?

    181.redis 和 memecache 有什么区别?

    182.redis 为什么是单线程的?

    183.什么是缓存穿透?怎么解决?

    184.redis 支持的数据类型有哪些?

    185.redis 支持的 java 客户端都有哪些?

    186.jedis 和 redisson 有哪些区别?

    187.怎么保证缓存和数据库数据的一致性?

    188.redis 持久化有几种方式?

    189.redis 怎么实现分布式锁?

    190.redis 分布式锁有什么缺陷?

    191.redis 如何做内存优化?

    192.redis 淘汰策略有哪些?

    193.redis 常见的性能问题有哪些?该如何解决?

    十九、JVM

    194.说一下 jvm 的主要组成部分?及其作用?

    195.说一下 jvm 运行时数据区?

    196.说一下堆栈的区别?

    197.队列和栈是什么?有什么区别?

    198.什么是双亲委派模型?

    199.说一下类加载的执行过程?

    200.怎么判断对象是否可以被回收?

    201.java 中都有哪些引用类型?

    202.说一下 jvm 有哪些垃圾回收算法?

    203.说一下 jvm 有哪些垃圾回收器?

    204.详细介绍一下 CMS 垃圾回收器?

    205.新生代垃圾回收器和老生代垃圾回收器都有哪些?有什么区别?

    206.简述分代垃圾回收器是怎么工作的?

    207.说一下 jvm 调优的工具?

    208.常用的 jvm 调优的参数都有哪些?

    2、面试题答案汇总
    (一)基础模块
    (二)容器
    (三)多线程
    (四)反射
    (五)对象拷贝
    (六)JavaWeb
    (七)异常
    (八)网络
    (九)设计模式
    (十)Spring/SpringMVC
    (十一)Spring Boot / Spring Cloud
    (十二)Hibernate
    (十三)Mybatis
    (十四)RabbitMQ
    (十五)Kafka
    (十六)Zookeeper
    (十七)MySql
    (十八)Redis
    (十九)JVM

    展开全文
  • 本课程主要讲述Android开发Java的基础到核心的学习,包括:变量、操作符和表达式、语句、数组、类的方法、访问控制与封装、继承、常见工具类、链表、实际操作综合示例。课程由浅到深,实用性强。
  • 原文:java常用开发工具类大全,涵盖常见工作的问题(超赞) 源代码下载地址:http://www.zuidaima.com/share/1845027886320640.htm /** *方法说明:实现service方法 *输入参数:HttpServletRequest req...
  • 常见python爬虫框架

    万次阅读 2017-07-21 16:26:34
     一些爬虫项目的半成品 二、常见python爬虫框架  (1)Scrapy:很强大的爬虫框架,可以满足简单的页面爬取(比如可以明确获知url pattern的情况)。用这个框架可以轻松爬下来如亚马逊商品信息之的数据。但是...
  • 完美可用-DirectX修复工具增强版DirectX Repair

    万次阅读 热门讨论 2018-12-06 11:19:34
    DirectX修复工具最新版:DirectX Repair V3.7 增强版 NEW! 版本号:V3.7.0.26539 大小: 107MB/7z格式压缩,189MB/zip格式压缩,322MB/解压后 其他版本:标准版 在线修复版 MD5校验码:DirectX Repair.exe/...
  • 由于 Web 应用程序需要联合使用到多种语言,每种语言都包含一些特殊的字符,对于动态语言或标签式的语言而言,如果需要动态构造语言的内容时,一个我们经常会碰到的问题就是特殊字符转义的问题。下面是 Web 开发者最...
  • 常用的时间工具类

    千次阅读 2018-11-16 17:19:09
    1.说明:收集一些常用的时间工具类,仅用作记录和学习交流。可以使用CTRL+F搜索关键字。 2.推荐一个时间格式在线转换工具,注意图中标记的转换单位 3.工具代码及注释。 /** * 将时间戳转为字符串 * @...
  • 一、引言 json字符串现在是项目中很常用的了,尤其是在写...常见的有由alibaba提供的fastjson、jackson 等等一些 二、实现 引入jar先,jackSon解析JSON,SpringMVC内置的解析器就是这个。 &lt;!-- Jacks...
  • java工具类-bean转map

    千次阅读 2020-06-22 21:46:56
    通过工具类BeanMap来完成 效率高,底层也是基于反射,不过做了些优化,比如缓存等手段 (推荐) 通过Apache的BeanUtils来完成 bean转化map是Map<String, String>类型 循环转化1w次,对比下BeanMap
  • Spring的加密工具类---DigestUtils

    千次阅读 2019-09-09 10:40:26
    最近有个需求参数传递需要加密,得用SHA-256加密和MD5加密,搞了半天,最后发现spring的工具类--DigestUtils集成了基本的加密算法,直接调用就行。 常见的加密算法分类: 常见的加密算法可以分成三类,对称加密算法,...
  • 文章目录一、elasticsearch官方文档说明1.1 增(只看原理,后面有完整的工具类)1.2 删(只看原理,后面有完整的工具类)1.3 改(只看原理,后面有完整的工具类)1.4 查(只看原理,后面有完整的工具类)二、elastic...
  • Java实现几种加密工具类

    千次阅读 2017-12-11 16:40:30
    Java实现几种加密工具类
  • 快速了解基于AQS实现的Java并发工具类

    千次阅读 多人点赞 2019-07-08 08:00:00
    AQS是AbstractQueuedSynchronizer的简称,类如其名,抽象的队列式的同步器,它是一个Java提高的底层同步工具类,用一个int类型的变量表示同步状态,并提供了一系列的CAS操作来管理这个同步状态,许多同步类实现都...
  • Android项目中常用的工具类集(史上最全整理)

    千次阅读 热门讨论 2014-11-12 11:08:17
    String工具类,可用于常见字符串操作,如: isEmpty(String str) 判断字符串是否为空或长度为0 isBlank(String str) 判断字符串是否为空或长度为0 或由空格组成 utf8Encode(String str) 以utf-8格式编码 ...
  • 所以抽空就写了一个小小的工具类,实现了数字转汉字、大数相加、相减、相乘的工具类,希望能帮助有需求的同行们。本篇就分享一下数字转化为汉字的思路吧。   数字转汉字的原理: 拆分:由于整数部分要加权值,而...
  • java类的转换工具类,泛型的使用

    万次阅读 2021-02-08 15:35:10
    做项目的时候,要取出map中的值进行运算,map对象如下,不知道什么类型,还要进行准确的转换,确实是不容易,然后写一个可扩展的工具类,方便项目使用,也方便大家使用 Map<String,Object> map = new ...
  • 自定义Java工具类

    千次阅读 2018-05-08 10:27:33
    字符串和集合等是否为空判断),在这里我们讲介绍一些常见的数据校验,我们把它封装在utils中,方便以后做项目去调用。 /*判断字符串是否为空,这里为空的标准为字符串等于null 或者去除开头结尾的空值字符长度为0...
  • java统计系统工具类

    万次阅读 2019-08-06 15:28:41
    在某些常见的图形、表格统计系统中,往往需要计算同比、环比等等,下面是自己整理的常用统计工具类方法 import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; ...
  • Java操作百万数据量Excel导入导出工具类(维护中)

    万次阅读 多人点赞 2018-06-28 15:12:17
    更新日志:(如果有更好的优化方案或者更高级的工具类:欢迎评论或者私信) * 1.response.reset();注释掉reset,否在会出现跨域错误。 * 2.可导出多个单元、poi官方建议大数据量解决方案:SXSSFWorkbook。 * 3....
  • Linux C/C++ 学习路线

    万次阅读 多人点赞 2019-07-04 20:41:56
    二、Linux C/C++ 方向的一些思考 三、计算机基础知识的梳理 四、C++ 方向的深入学习路线 五、项目 + 亮点 + 面试的一些思考 六、总结 前言 Linux C/C++ 从零基础到大神的学习路线,自己的真实学习路线,干货很多,...
  • Android:常用Utils工具类

    千次阅读 2015-11-06 15:16:51
    Android常用工具类 主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java。 目前包括(HttpUtils、DownloadManagerPro、ShellUtils、PackageUtils、PreferencesUtils、JSONUtils、...
  • SpringBoot 自带的md5加密工具类

    千次阅读 2019-05-19 17:15:39
    网上好多都是自己写一个加密工具类,其实springboot库里面是有现成的轮子。轮子有现成的,原则上就用现成的~~ import org.springframework.util.DigestUtils; //比如对密码进行 md5 加密 String md5Pass = ...
  • 丢弃掉那些BeanUtils工具类吧,MapStruct真香!!!

    万次阅读 多人点赞 2020-08-10 12:55:30
    》中,我曾经对几款属性拷贝的工具类进行了对比。 然后在评论区有些读者反馈说MapStruct才是真的香,于是我就抽时间了解了一下MapStruct。结果我发现,这真的是一个神仙框架,炒鸡香。 这一篇文章就来简单介绍下Map...
  • java一些常见类和方法

    千次阅读 2018-08-02 19:05:35
    Arrays工具类常见方法: Character类常见方法: Math类常见方法: 如何获取任意范围内的随机数? int number=(int)(Math.random()*(end-start))+start; System类中垃圾回收的方法gc():垃圾回收器,调用...
  • 分享一个时间日期转换工具类DateTime源码在最后面!!注:时间日期表达格式(Android端基本都是这个格式) 字符 表达内容 yyyy 表示年份 MM 表示月份 dd 表示日 HH 表示小时,24小时制 hh 表示小时,12...
  • 国内外主流静态分析类工具汇总

    万次阅读 2019-07-27 11:17:48
    笔者从事该软件安全方面工作,在工作和学习中收集了国内外比较主流的静态分析类工具,供大家参考。大多是资料来自于网络整理,如有不足或欠缺,还请在评论中指出。我进行修正。也欢迎同行多多交流。 我使用0标注...
  • Android常用的工具类

    千次阅读 2014-01-26 02:04:36
    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java。 目前包括HttpUtils、DownloadManagerPro、ShellUtils、PackageUtils、 PreferencesUtils、JSONUtils、FileUtils、ResourceUtils、StringUtils、 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 515,915
精华内容 206,366
关键字:

常见的一些工具类