Java中try....catch语句除了可以捕获异常并输出异常信息,还有什么用呢

Java中try....catch语句除了可以捕获异常并输出异常信息,还有什么用呢

2个回答

catch语句中不仅可以输出异常,也可以对异常进行处理,比如,从控制台输入数字,发生数字格式异常后,在catch语句中可以给出提出信息,要求重新输入

try....catch语句的作用就是用来接受和处理程序异常的,选择打印出异常信息,是为了让开发者在开发时明白异常会发生在哪里,快速定位到程序出错的地方,从而及时改正程序。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
求问关于java中异常处理的问题。。
不是很理解java异常处理中的try catch语句块,比如说我的catch语句块中是一个System.out.println("caught IOEexception":e.getMessage()),那么这个catch语句起到的作用就是提示我一下哪个地方有异常吗?然后我再去它提示我发生异常的地方去修改我的程序? 那么如果我的catch语句里面什么都没写,只是一个catch{};由于写了try catch语句块编译一定会通过,那岂不是说 假如现在我的程序发生了异常 然后被捕获到了 可是它没有提示我碰到发生异常的信息,并且编译通过了 然后运行的时候就会出错 这样的话使用了try catch语句块岂不是还不如不用吗。。?因为如果我不用try catch语句块的话 我的编译就通不过 会提示我哪里出错了 我还可以去改。但是使用了try catch语句块后,编译通过了 可是运行时就出错了 。。 刚开始学习java 真心想不通了〒_〒
java题目:编写一个类TestAllException,其中包含主方法main和计算矩形面积的方法calculateArea。
作业要求如下: (1)编写一个类TestAllException,其中包含主方法main和计算矩形面积的方法calculateArea。 (2)在main方法中,从键盘上接收矩形的长和宽,调用方法calculateArea计算并且返回矩形的面积,之后在main方法中输出矩形的面积。 (3)思考一下,在这个任务中,有什么异常是系统无法给定,需要自定义的?请自定义这种异常类,并且在方法calculateArea中声明和抛出。 (4)在main方法中,使用try-catch结构捕获所有可能的异常。 可以参考如下程序框架: //包引用语句 //自定义异常类的声明 public class TestAllException { public static double calculateArea(double a, double b) throws ...(...表示自定义异常类) { //判断什么时候声明异常 //计算并且返回矩形面积 } public static void main(String[] args) { //从键盘上接收矩形的长和宽 //调用 方法calculateArea //输出矩形面积 //对于上述操作,注意捕获可能出现的异常 } }
想通过ZipInStream类将压缩文件解压到指定的文件夹中
想通过ZipInStream类将压缩文件解压到指定的文件夹中 源程序是: import java.io.*; import java.util.zip.*; public class Decompressing { // 创建文件 public static void main(String[] temp) { ZipInputStream zin; // 创建ZipInputStream对象 try { // try语句捕获可能发生的异常 zin = new ZipInputStream(new FileInputStream("F:/hello.zip")); // 实例化对象,指明要进行解压的文件 ZipEntry entry = zin.getNextEntry(); // 获取下一个ZipEntry while (((entry = zin.getNextEntry()) != null) && !entry.isDirectory()) { // 如果entry不为空,并不在同一目录下 File file = new File("F:\\" + entry.getName()); // 获取文件目录 System.out.println(file); if (!file.exists()) { // 如果该文件不存在 file.mkdirs();// 创建文件所在文件夹 file.createNewFile(); // 创建文件 } zin.closeEntry(); // 关闭当前entry System.out.println(entry.getName() + "解压成功"); } zin.close(); // 关闭流 } catch (Exception e) { e.printStackTrace(); } } } 可是程序运行不了,有以下异常: java.lang.IllegalArgumentException: MALFORMED at java.util.zip.ZipCoder.toString(ZipCoder.java:58) at java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:300) at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:122) at 练习.Decompressing.main(Decompressing.java:48) F盘里面有hello.zip 希望大神帮忙解答一下,特别是那个entry和getNextEntry到底是什么意思,没弄懂啊
为什么捕获异常之后的输出语句没有被成功执行呢?
public class XTException extends Exception { public XTException(String msg){ super(msg); } } ``` public class Demo { public int div(int a,int b) throws XTException{ int c = a/b; return c; } } ``` public class Test { public static void main(String[] args) { Demo d = new Demo(); try { System.out.println(d.div(10, 0)); } catch (XTException e) { e.printStackTrace(); } System.out.println("为什么不可以输出这句话?"); } }
spring 声明式事务 不自动会滚
spring 声明式事务配置,主动抛出异常不回滚。 博客分类: spring数据库 默认spring只在发生未被捕获的runtimeexcetpion时才回滚。 原文:http://blog.csdn.net/ky498320858/article/details/6576121 **最笨的办法:代码级控制:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();** 为何在aop advitor中配置rollba-for=“java.lang.Exception”异常时不回滚呢? 待续,这个问题必须解决 问题已解决: 原理:spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获runtimeexception的异常,但可以通过 <tx:method name="upd*" propagation="REQUIRED" rollback-for="java.lang.Exception"/> 配置来捕获特定的异常并回滚 换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚 解决方案: 方案1.例如service层处理事务,那么service中的方法中不做异常捕获,或者在catch语句中最后增加throw new RuntimeException()语句,以便让aop捕获异常再去回滚,并且在service上层(webservice客户端,view层action)要继续捕获这个异常并处理 方案2.在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();语句,手动回滚,这样上层就无需去处理异常(现在项目的做法) <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="upd*" propagation="REQUIRED" rollback-for="java.lang.Exception"/> <tx:method name="del*" propagation="REQUIRED" /> <tx:method name="*" propagation="SUPPORTS" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="canyin" expression="execution(* com.laphone.base.baseservice.*.*(..)) ||execution(* com.laphone.canyin.*.service.*.*(..)) || execution(* com.laphone.canyin.*.*.service.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="canyin" /> </aop:config>
不懂省略的catch方法应该怎么写?
package com.huizhi.users.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import com.huizhi.database.DatabaseDAO; import com.huizhi.users.action.Users; public class UsersDAO { private Connection con; private PreparedStatement pt; private ResultSet rs; public boolean findUsers(String username){ boolean flag=false; con=DatabaseDAO.getConnection(); try{ pt=con.prepareStatement("select*from users where username=?"); //获得PreparedStatement对象 pt.setString(1,username); //为参数赋值 rs=pt.executeQuery(); //执行查询语句,获取结果集 if (rs.next()){ //若果继续执行,表示用户名存在 flag=true; } }catch(SQLException e){ //捕获异常信息 e.printStackTrace(); }finally{ DatabaseDAO.closeRs(rs); //关闭相应资源 DatabaseDAO.closePt(pt); //关闭PreparedStatement DatabaseDAO.closeCon(con); //关闭数据库连接 } return flag; } public int save(Users users) { // TODO Auto-generated method stub int i=0; con=DatabaseDAO.getConnection(); try{ pt=con.prepareStatement("inset into users(username,password,"+"name,nic,sex,age,email,phone,selfshow)values(?,?,?,?,?,?,?,?,?)"); pt.setString(1,users.getUsername()); pt.setString(2,users.getPassword()); pt.setString(3,users.getName()); pt.setString(4,users.getNic()); pt.setString(5,users.getSex()); pt.setInt(6,users.getAge()); pt.setString(7,users.getEmail()); pt.setString(8, users.getPhone()); pt.setString(9,users.getSelfshow()); i=pt.executeUpdate(); // 省略catch()和finally()方法 return i; } }
运行下面的代码为什么这么慢
import java.awt.*; import javax.swing.*; import java.sql.*; import java.awt.event.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.regex.*; import java.util.Random; import static java.awt.BorderLayout.*; import java.io.File; import java.io.IOException; public class SwingDemo { Random r; Link lk,lk1; ResultSet rs,rs1; public void init() { JFrame jf=new JFrame(); final JPanel jp=new JPanel(); jp.setPreferredSize(new Dimension(300,300)); JPanel jp1=new JPanel(); final JTextField jtf=new JTextField(20); jp1.setLayout(new FlowLayout(FlowLayout.RIGHT)); JButton jb=new JButton("发送"); JScrollPane jsp=new JScrollPane(); jp.add(jsp); jf.setLayout(new BorderLayout()); jf.add(jp,NORTH); jf.add(jp1,SOUTH); jp1.add(jtf); jp1.add(jb); jf.pack(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); jb.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { String out=""; String result=""; String s=jtf.getText(); if(s.equals("")) { JOptionPane.showMessageDialog(null, "不能添加空白内容"); } else if(s.length()<4) { result=find(s); } JPanel jp2=new JPanel(); jp2.setPreferredSize(new Dimension(300,50)); JTextArea jta1=new JTextArea(); jta1.setBackground(Color.RED); jp2.setLayout(new FlowLayout(FlowLayout.LEFT)); jp2.add(jta1); JPanel jp3=new JPanel(); jp3.setPreferredSize(new Dimension(300,50)); JTextArea jta2=new JTextArea(); jta2.setBackground(Color.YELLOW); jp3.setLayout(new FlowLayout(FlowLayout.RIGHT)); jp3.add(jta2); jp.setLayout(new BoxLayout(jp,BoxLayout.Y_AXIS)); jp.add(jp2); jp.add(jp3); jta1.setText(s); jta2.setText(result); } }); } public String find(String s) { String result=""; try { String sql="select *from chat1"; lk=new Link(sql); rs=lk.sta.executeQuery(sql); while(rs.next()) { String string =new String(rs.getString("question")); if(string.equals(s)||string.contains(s)||s.contains(string)) { try { String sql1="select * from chat where question='"+string+"'"; lk1=new Link(sql1); rs1=lk1.sta.executeQuery(sql1); while(rs1.next()) { result=new String (rs1.getString("answer")); } } catch(Exception e) { e.printStackTrace(); } finally { lk1.closeConn(); } } } } catch(Exception e) { e.printStackTrace(); } finally { lk.closeConn(); } if(result.equals("")) { int i=3; int k=r.nextInt(i); if(k==0) result="asdfsdaf"; else if(k==1) result="rtfdsg"; else if(k==2) result="fgasdd"; } return result; } public static void main(String[] args) { new SwingDemo().init(); } } 连接数据库的代码 import java.sql.*; public class Link{ //ResultSet rs;//声明结果集引用 Connection conn;//声明Connection引用 Statement sta; public Link(String ml){//有参构造器 try{ Class.forName("com.mysql.jdbc.Driver");//加载驱动器 String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";//url指向要访问的mysql数据库名 String name="root";//用户名 String pwd="123456"; conn=DriverManager.getConnection(url,name,pwd);//连接数据库 sta=conn.createStatement();//创建语句 //rs=sta.executeQuery(ml);//执行查询得到的结果集 }catch(SQLException e){//捕获异常并打印 e.printStackTrace(); } catch(ClassNotFoundException e){ e.printStackTrace();} } public void closeConn(){//关闭数据库连接的方法 try{ //关闭结果集,语句,连接 //if(rs!=null) // rs.close(); if(sta!=null) sta.close(); if(conn!=null) conn.close(); }catch(SQLException e){//捕获异常并打印 e.printStackTrace(); } } }
【jdbcTemplate】批量插入异常捕获
在使用jdbctemplate的批量操作的时候 调用jdbcTemplate.batchUpdate,他的原理机制是,集合一定数量的sql,一起发送到数据库,这样减少与数据库频繁交互的成本 但现在有一个问题就是,我这有50条sql,批量插入,然后有一条有问题,我如何让这一条执行失败时,不影响其余49条语句的执行呢? 下面是我自己封装的一个方法 批量插入这个list到数据库去,如果出现什么值太大,违反唯一性约束什么之类的异常,我的那个catch根本就捕获不住,我最多只能知道这个list插入有问题,没法实现list中一条记录有问题,不影响其他记录的执行 [code="java"] public void insert(final List<?> lists) { // 获取insert语句 eg:sql = insert into user (id,name,age) values (?,?,?) String sql = SqlUtils.getInsertSql(lists.get(0)); jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() { @Override public void setValues(PreparedStatement ps, int i) { Object value = lists.get(i); // objects = 获取代替?的具体值 Object[] objects = SqlUtils.getValues(value); for (int k = 0; k < objects.length; k++) { try { ps.setObject(k + 1, objects[k]); } catch (SQLException e) { log.error("数据库异常 -- "+value.getClass().getSimpleName(),e); } } } @Override public int getBatchSize() { return lists.size(); } }); } [/code]
激活账号的servlet运行报错500,代码是对的,为什么会报错?
报错 ![图片说明](https://img-ask.csdn.net/upload/201904/24/1556071273_272031.png) servlet代码 ``` package servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import bean.Check; import bean.DB; import bean.Tools; import java.sql.*; public class RegAdminServlet extends HttpServlet { /** * Constructor of the object. */ public RegAdminServlet() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //用以建立数据库连接的必要信息 String url="jdbc:mysql://localhost:3306/database"; String user="root"; String password="123456"; String adminid = Tools.codeToChinese(request.getParameter("adminid")); String adminpass = request.getParameter("adminpass"); String adminname = Tools.codeToChinese(request.getParameter("adminname")); String admintele = request.getParameter("admintele"); //省略号表示要输入具体的sql语句 String sql="select * from administrator adminID='"+adminid+"'"; //创建各个对象 Connection conn=null; //建立数据库连接的对象 Statement stmt=null; //创建用于执行SQL语句的Statement对象 ResultSet rs=null; //创建结果集对象 HttpSession session = request.getSession(); try{ //建立连接并执行语句 conn=DriverManager.getConnection(url, user, password); stmt=conn.createStatement(); rs=stmt.executeQuery(sql); //其它操作 if(rs.next()) { Check check = new Check(); boolean ck=check.check(adminid, adminpass, adminname, admintele); if(ck) { DB db = new DB(); StringBuffer newsql = new StringBuffer(); newsql.append("UPDATE administrator SET adminActivated='1' WHERE adminID='"+adminid+"'"); boolean a = db.executeUpdate(newsql.toString()); if(a){ session.setAttribute("message","激活成功!"); response.sendRedirect("regCheckSuccess.jsp"); } else{ session.setAttribute("message","激活失败,请重新激活!"); response.sendRedirect("regCheckFailure.jsp"); } } else { session.setAttribute("message", "激活失败!用户信息输入错误,请重新输入!"); response.sendRedirect("regCheckFailure.jsp"); } } else { session.setAttribute("message", "账号不存在,请重新输入!"); response.sendRedirect("regMsgAdmin.jsp"); } }catch(SQLException se){ throw new ServletException(se); }finally{ try{rs.close();}catch(SQLException se){} try{stmt.close();}catch(SQLException se){} try{conn.close();}catch(SQLException se){} } response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<form method=post action=PotalServlet>"); out.println("<table><tr>"); out.println("<td>请输入用户名</td>"); out.println("<td><input type=text name=username /></td>"); out.println("</tr><tr>"); out.println("<td>请输入密码</td>"); out.println("<td><input type=password name=userpass /></td>"); out.println("</tr><tr>"); out.println("<td><input type=reset value=重填 /></td>"); out.println("<td><input type=submit value=登录 /></td>"); out.println("</tr>"); out.println("</table>"); out.println("</form>"); //out.close()不能调用,否则portal中后面的输出语句将不输出 /*out .println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close();*/ } /** * Initialization of the servlet. <br> * * @throws ServletException if an error occurs */ public void init() throws ServletException { String classname="com.mysql.jdbc.Driver"; try{ Class.forName(classname); }catch(ClassNotFoundException ce){ throw new ServletException("加载数据库驱动失败"); } } } ``` Check包代码 ``` package bean; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Check { public static boolean check(String adminid,String adminpass,String adminname,String admintele) { DB db = new DB(); Connection conn=db.createConn(); String sql = "select * from administrator where adminID='"+adminid+"'"; /*Statement stmt = null; ResultSet rs = null;*/ try{ Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery(sql); while(rs.next()) { String adminID = rs.getString("adminID"); String adminPass = rs.getString("adminPass"); String adminName = rs.getString("adminName"); String adminTele = rs.getString("adminTele"); if(adminID.equals(adminid)&&adminPass.equals(adminpass)&&adminName.equals(adminname)&&adminTele.equals(admintele)) { return true; } else { return false; } } }catch(SQLException se){ return false; }finally{ //try{rs.close();}catch(SQLException se){} //try{stmt.close();}catch(SQLException se){} //try{conn.close();}catch(SQLException se){} } return false; } } ``` DB包代码 ``` package bean; //导入创建应用数据要用到的类 import java.sql.DriverManager; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class DB { private String classname="com.mysql.jdbc.Driver"; //数据库驱动类路径 private String url="jdbc:mysql://localhost:3306/database"; //数据库URL private String user="root"; //登录数据库的用户名 private String pwd="123456"; //登录数据库的密码 private Connection conn=null; //申明一个Connection对象 private Statement stmt=null; //声明一个Statement对象 private ResultSet rs=null; /*通过构造方法加载数据库驱动*/ public DB(){ //DB类的构造方法 try{ //必须使用try catch语句捕获加载数据库驱动时可能发生的异常 Class.forName(classname).newInstance(); //加载数据库驱动 }catch (Exception e){ e.printStackTrace(); //输出异常信息 System.out.println("加载数据库驱动失败!!"); } } /*创建数据库连接*/ public Connection createConn(){ try{ conn=DriverManager.getConnection(url, user, pwd); }catch(SQLException e){ e.printStackTrace(); System.out.println("获取数据库连接失败!!"); } return conn; } /*获取Statement对象*/ public void getStmt(){ createConn(); try{ //调用Connection类实例的createStatement()方法创建一个Statement类对象 stmt=conn.createStatement(); }catch(SQLException e){ e.printStackTrace(); System.out.println("创建Statement对象失败!!"); } } /*创建对数据库进行操作的增加、删除和修改的executeUpdate()方法*/ public boolean executeUpdate(String sql){ boolean mark=false; try{ getStmt(); //创建一个Statement对象 int iCount=stmt.executeUpdate(sql); //执行操作,并获取所影响的记录数 if(iCount>0) //更新数据库成功 mark=true; else //更新失败 mark=false; }catch(SQLException e){ e.printStackTrace(); } return mark; } /*查询数据库*/ public ResultSet executeQuery(String sql){ try{ getStmt(); try{ rs=stmt.executeQuery(sql); }catch(Exception e){ e.printStackTrace(); System.out.println("查询数据库失败!!"); } }catch(Exception e){ e.printStackTrace(); } return rs; } public void close(){ try{if(rs!=null)rs.close();}catch(Exception e){} try {stmt.close();}catch(Exception e){} try {conn.close();}catch(Exception e){} } } ``` jsp代码 ``` <%@ page language="java" import="java.util.*" pageEncoding="GB2312"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'regAdmin.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script language="javascript"> function isNull(str) { if (str.length==0) return true; else return false; } function isValidate(form) { adminid=form.adminid.value; adminpass=form.adminpass.value; adminname=form.adminname.value; admintele=form.admintele.value; if(isNull(adminid)) { alert("请输入账号!"); return false; } if(isNull(adminpass)) { alert("请输入密码!"); return false; } if(isNull(adminname)) { alert("请输入姓名!"); return false; } if(isNull(admintele)) { alert("请输入联系方式!"); return false; } return true; } </script> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form name="form" action="RegAdminServlet" method="post" onSubmit="return isValidate(form)"><br> <h1 align="center"> 管理员账号激活</h1><hr><p><br> <table width="300" border="0" align="center"> <tr><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td></tr><tr> <td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td>账 号 :</td> <td><input type="text" name="adminid" /></td> </tr> <tr> <td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td>密 码 :</td> <td><input type="password" name="adminpass"/></td> </tr> <tr> <td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td>姓 名 :</td> <td><input type="text" name="adminname"/></td> </tr> <tr> <td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td valign="top"><br></td><td>联 系<br>方 式 :</td> <td><input type="text" name="admintele"/></td> </tr> </table><br> <div align="center"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" name="submit" value="激活"/> &nbsp;&nbsp;&nbsp;<input type="reset" name="reset" value="清空"/><br><br><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="loginAdmin.jsp">【返回】</a> </div> <p> </form> </body> </html> ``` 数据库 ![图片说明](https://img-ask.csdn.net/upload/201904/24/1556071645_465453.png)
在VS2015的MFC项目中对的 ADO数据库连接不成功
//在ADO操作中建议语句中要常用try...catch()来捕获错误信息 try { //打开本地SQL数据库Book.mdf m_pConnection->Open("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=F:\Summer Holiday homework\Test\Book.mdf;Integrated Security=True;Connect Timeout=30","","",adModeUnknown); } catch (_com_error e) { AfxMessageBox(L"数据库连接失败,确认数据库“Book”是否在当前路径下!"); return; } 数据库的路径是正确的,为什么连接不上呢 提示错误信息“数据库连接失败,确认数据库“Book”是否在当前路径下!” ![图片说明](https://img-ask.csdn.net/upload/201608/13/1471088274_944313.png)
关于异常和日志的处理
各位好,我有两个方面的疑问。 一.异常处理。 假设我有web层--->service层--->dao层。 如果我在dao层出现了异常,比如DataAccessException。我该如何处理呢? 我试了一下,觉得有以下几种方案: 1.最简单的是在web层捕获DataAccessException然后处理。 2.在dao层捕获,但不处理,像service层抛,知道抛到web层处理。 但是这样做,每一层都会有 try catch 语句,感觉很麻烦。 3.同2类似,但是使用spring的annouation注释,相对减少try catch 我想请问那种方法好点? 还有我觉得可以自己定义一个GeneralException继承自RuntimeException。 每次补货异常,但是抛出这个GeneralException这个异常,然后统一处理。 二.日志的处理 我的解决方法有以下几点: 1.将需要记入日志的类里面写上诸如: Logger=LogFactory.getLogger(); logger.Info()之类的语句? 但是这样会做很多类都会有相同的日志语句。 2.利用spring aop 实现。 会不会有性能问题? 3.在自定义异常的那个GeneralException类里加上日志功能。 每次处理异常的时候同时处理日志。 请问那种方法好,或者有什么更好的方法? 谢谢回答。
MFC ADO OnSelchangeListaccess()报错问题
之前没用过ADO,学习过程中使用OnSelchangeListaccess()报错了,代码如下: ``` BOOL CDataBaseMFCTestDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 //////////////////////////////////////////////////////////////////////////////////////////// // 使用ADO创建数据库记录集 m_pRecordset.CreateInstance(__uuidof(Recordset)); // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些想不到的错误。jingzhou xu try { m_pRecordset->Open("SELECT * FROM DemoTable", // 查询DemoTable表中所有字段 theApp.m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针 adOpenDynamic, adLockOptimistic, adCmdText); } catch (_com_error& e) { dump_com_error(e); } ///////////////////////////////////////////////////////////////////////////////////////////////////// _variant_t var; CString strName, strAge; // 清空列表框 m_AccessList.ResetContent(); strName = strAge = ""; // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些想不到的错误。jingzhou xu try { if (!m_pRecordset->BOF) m_pRecordset->MoveFirst(); else { AfxMessageBox("表内数据为空"); return false; } // 读入库中各字段并加入列表框中 while (!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("Name"); if (var.vt != VT_NULL) strName = (LPCSTR)_bstr_t(var); var = m_pRecordset->GetCollect("Age"); if (var.vt != VT_NULL) strAge = (LPCSTR)_bstr_t(var); m_AccessList.AddString(strName + " --> " + strAge); m_pRecordset->MoveNext(); } // 默认列表指向第一项,同时移动记录指针并显示 m_AccessList.SetCurSel(0); OnSelchangeListaccess(); } catch (_com_error& e) { dump_com_error(e); } return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } ``` 说OnSelchangeListaccess()未定义标识符,原因在哪
POCO C++库操作MySQL的Blob字段,SELECT * 就崩溃了,求破。
表里有一个Blob字段,主要用来插入5MB以下的图片,SQL语句是这样的: SELECT * FROM message WHERE id="uuid"; 如果不存在就直接INSERT,否则就UPDATE. 使用POCO C++库执行时,当执行 statement.execute()方法就崩溃了,并且try{}catch(...)都无法捕获到,直接挂了。 多数情况下是工作正常的,一般执行上次左右吧就会出现一次。 MYSQL使用的是5.6,5.7也试了,都有。 但是如果使用 SELECT id FROM message WHERE id="uuid"的SQL语句,出现崩溃概率就会降低很多,但依然存在。 求破。
MFC ADO链接数据库问题
listBookInfo("select * from Table_Book"); 这一句显示错误:错误 C2664 “void CTestDlg::listBookInfo(CString)”: 无法将参数 1 从“const char [25]”转换为“CString” Test f:\summerholidayhomework\test\test\testdlg.cpp 119 不存在从 "const char [25]" 转换到 "ATL::CStringT<wchar_t, StrTraitMFC_DLL<wchar_t, ATL::ChTraitsCRT<wchar_t>>>" 的适当构造函数 Test f:\SummerHolidayhomework\Test\Test\TestDlg.cpp 119 //Ado数据库连接函数 void CTestDlg::listBookInfo(CString strSQL) { m_listBookInfo.DeleteAllItems(); // 首先清空列表视图中的所有数据 _ConnectionPtr m_pConnection; // 创建连接对象指针 m_pConnection.CreateInstance(_uuidof(Connection));// 创建连接对象实例 //在ADO操作中建议语句中要常用try...catch()来捕获错误信息 try { //打开本地SQL数据库Book.mdf m_pConnection->Open("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=F:\SummerHolidayhomework\Test\Book.mdf;Integrated Security=Ture;Connect Timeout=30", "", "", adModeUnknown); } catch (_com_error e) { e.Error(); MessageBox(e.ErrorMessage()); MessageBox(e.Description()); return; } _RecordsetPtr m_pRecordset; // 创建记录集对象指针 m_pRecordset.CreateInstance(__uuidof(Recordset));//创建记录集指针对象实例 try { m_pRecordset->Open( _variant_t(strSQL), // 打开记录集 m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针 adOpenDynamic, // 动态光标 adLockOptimistic, // 乐观锁定方式 adCmdText // CommandText是文本命令 ); } catch (_com_error *e) { AfxMessageBox(e->ErrorMessage()); } _variant_t var; CString strTmp; while (!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("书号"); // 获取书号字段的值 strTmp = (LPCSTR)_bstr_t(var); m_listBookInfo.InsertItem(0, strTmp); var = m_pRecordset->GetCollect("书名"); // 获取书名字段的值 strTmp = (LPCSTR)_bstr_t(var); m_listBookInfo.SetItemText(1, 1, strTmp); var = m_pRecordset->GetCollect("类别"); // 获取类型字段的值 strTmp = (LPCSTR)_bstr_t(var); m_listBookInfo.SetItemText(2, 2, strTmp); var = m_pRecordset->GetCollect("单价"); // 获取单价字段的值 strTmp = (LPCSTR)_bstr_t(var); m_listBookInfo.SetItemText(3, 3, strTmp); //将记录集指针移动到下一条记录 m_pRecordset->MoveNext(); } m_pRecordset->Close(); // 关闭记录集 m_pRecordset.Release(); // 释放记录集对象 m_pRecordset = NULL; if (m_pConnection->State) m_pConnection->Close(); // 关闭与数据库的连接 m_pConnection = NULL; UpdateData(FALSE); }
mfc通过ado连接access 老是无效指针,求高手指点
// Snake.cpp : 定义应用程序的类行为。 // #include "stdafx.h" #include "afxwinappex.h" #include "afxdialogex.h" #include "Snake.h" #include "MainFrm.h" #include "winsock2.h" #include "SnakeDoc.h" #include "SnakeView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CSnakeApp BEGIN_MESSAGE_MAP(CSnakeApp, CWinAppEx) ON_COMMAND(ID_APP_ABOUT, &CSnakeApp::OnAppAbout) // 基于文件的标准文档命令 ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew) ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen) END_MESSAGE_MAP() // CSnakeApp 构造 CSnakeApp::CSnakeApp() { m_bHiColorIcons = TRUE; // 支持重新启动管理器 m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_ALL_ASPECTS; #ifdef _MANAGED // 如果应用程序是利用公共语言运行时支持(/clr)构建的,则: // 1) 必须有此附加设置,“重新启动管理器”支持才能正常工作。 // 2) 在您的项目中,您必须按照生成顺序向 System.Windows.Forms 添加引用。 System::Windows::Forms::Application::SetUnhandledExceptionMode(System::Windows::Forms::UnhandledExceptionMode::ThrowException); #endif // TODO: 将以下应用程序 ID 字符串替换为唯一的 ID 字符串;建议的字符串格式 //为 CompanyName.ProductName.SubProduct.VersionInformation SetAppID(_T("Snake.AppID.NoVersion")); // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CSnakeApp 对象 CSnakeApp theApp; // CSnakeApp 初始化 BOOL CSnakeApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinAppEx::InitInstance(); AfxEnableControlContainer(); AfxOleInit(); m_pConnection.CreateInstance(__uuidof(Connection)); // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息, // 因为它有时会经常出现一些想不到的错误。 try { // 打开本地Access库Demo.mdb m_pConnection->Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=test.accdb", "", "", adModeUnknown); } catch (_com_error& e) { //调用在CAdoRWAccessDlg中打印错误信息的静态函数 //CAboutDlg::dump_com_error(e); return FALSE; } // 初始化 OLE 库 /*if (!AfxOleInit()) { AfxMessageBox(IDP_OLE_INIT_FAILED); return FALSE; }*/ AfxEnableControlContainer(); EnableTaskbarInteraction(FALSE); // 使用 RichEdit 控件需要 AfxInitRichEdit2() // AfxInitRichEdit2(); // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, SetRegistryKey(_T("应用程序向导生成的本地应用程序")); LoadStdProfileSettings(4); // 加载标准 INI 文件选项(包括 MRU) InitContextMenuManager(); InitKeyboardManager(); InitTooltipManager(); CMFCToolTipInfo ttParams; ttParams.m_bVislManagerTheme = TRUE; theApp.GetTooltipManager()->SetTooltipParams(AFX_TOOLTIP_TYPE_ALL, RUNTIME_CLASS(CMFCToolTipCtrl), &ttParams); // 注册应用程序的文档模板。文档模板 // 将用作文档、框架窗口和视图之间的连接 CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CSnakeDoc), RUNTIME_CLASS(CMainFrame), // 主 SDI 框架窗口 RUNTIME_CLASS(CSnakeView)); if (!pDocTemplate) return FALSE; AddDocTemplate(pDocTemplate); // 分析标准 shell 命令、DDE、打开文件操作的命令行 CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo); // 调度在命令行中指定的命令。如果 // 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用程序,则返回 FALSE。 if (!ProcessShellCommand(cmdInfo)) return FALSE; // 唯一的一个窗口已初始化,因此显示它并对其进行更新 m_pMainWnd->MoveWindow(0,0,645,645,1); m_pMainWnd->CenterWindow(); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); // 仅当具有后缀时才调用 DragAcceptFiles // 在 SDI 应用程序中,这应在 ProcessShellCommand 之后发生 return TRUE; } int CSnakeApp::ExitInstance() { //TODO: 处理可能已添加的附加资源 AfxOleTerm(FALSE); return CWinAppEx::ExitInstance(); } // CSnakeApp 消息处理程序 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; public: void dump_com_error(_com_error &e); _RecordsetPtr m_pRecordset; //_RecordsetPtr m_pRecordset1; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedButton1(); CListBox m_AccessList; }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_LIST1, m_AccessList); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() //}}AFX_MSG_MAP ON_BN_CLICKED(IDC_BUTTON1, &CAboutDlg::OnBnClickedButton1) END_MESSAGE_MAP() // 用于运行对话框的应用程序命令 void CSnakeApp::OnAppAbout() { CAboutDlg aboutDlg; aboutDlg.DoModal(); } void CAboutDlg::dump_com_error(_com_error &e) { CString ErrorStr; _bstr_t bstrSource(e.Source()); _bstr_t bstrDescription(e.Description()); ErrorStr.Format(L"\n\tADO Error\n\tCode = %08lx\n\tCode meaning = %s\n\tSource = %s\n\tDescription = %s\n\n", e.Error(), e.ErrorMessage(), (LPCTSTR)bstrSource, (LPCTSTR)bstrDescription); //在调试窗口中打印错误信息,在Release版中可用DBGView查看错误信息 ::OutputDebugString((LPCTSTR)ErrorStr); #ifdef _DEBUG AfxMessageBox(ErrorStr, MB_OK | MB_ICONERROR); #endif } void CAboutDlg::OnBnClickedButton1() { _variant_t var; CString strName, strAge; m_AccessList.ResetContent(); strName = strAge = ""; try { if (!m_pRecordset->BOF) m_pRecordset->MoveFirst(); else { AfxMessageBox(L"表内数据为空"); return; } while (!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("time"); if (var.vt != VT_NULL) strName = (LPCSTR)_bstr_t(var); var = m_pRecordset->GetCollect("score"); if (var.vt != VT_NULL) strAge = (LPCSTR)_bstr_t(var); m_AccessList.AddString(strName + " --> " + strAge); m_pRecordset->MoveNext(); } m_AccessList.SetCurSel(0); } catch (_com_error& e) { dump_com_error(e); } } // CSnakeApp 自定义加载/保存方法 void CSnakeApp::PreLoadState() { BOOL bNameValid; CString strName; bNameValid = strName.LoadString(IDS_EDIT_MENU); ASSERT(bNameValid); GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT); } void CSnakeApp::LoadCustomState() { } void CSnakeApp::SaveCustomState() { } // CSnakeApp 消息处理程序
动态规划入门到熟悉,看不懂来打我啊
持续更新。。。。。。 2.1斐波那契系列问题 2.2矩阵系列问题 2.3跳跃系列问题 3.1 01背包 3.2 完全背包 3.3多重背包 3.4 一些变形选讲 2.1斐波那契系列问题 在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n&gt;=2,n∈N*)根据定义,前十项为1, 1, 2, 3...
程序员,职场上请远离这种人!
对有些职场人来讲,甩锅就是一种生存手段。01.从大学打篮球说起上大学的时候喜欢打篮球,然后我又特别喜欢抢篮板,经常是跳起来的时候没事,落下来的时候偶尔会踩到别人的脚上,于...
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
一个读研让我损失了一百万的真实故事
关注我!只要10分钟,包你学会数据分析 毕业后,应该就业还是考研? 我刚出国留学那会儿,就惊讶的发现,外国local95%都不会选择读研 他们说,硕士学费很贵,时间宝贵,老板不认,所以很费 当几乎所有人都是本科学历时,硕士学历反而像个异类 在老板眼里,三年硕士远远不如3年的工作经验实用 他们甚至专门为拒绝高学历者发明了一个词,叫overoccupie...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...
shell脚本:备份数据库、代码上线
备份MySQL数据库 场景: 一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求: 1)每天备份一次,需要备份所有的库 2)把备份数据存放到/data/backup/下 3)备份文件名称格式示例:dbname-2019-11-23.sql 4)需要对1天以前的所有sql文件压缩,格式为gzip 5)本地数据保留1周 6)需要把备份的数据同步到远程备份中心,假如...
聊聊C语言和指针的本质
坐着绿皮车上海到杭州,24块钱,很宽敞,在火车上非正式地聊几句。 很多编程语言都以 “没有指针” 作为自己的优势来宣传,然而,对于C语言,指针却是与生俱来的。 那么,什么是指针,为什么大家都想避开指针。 很简单, 指针就是地址,当一个地址作为一个变量存在时,它就被叫做指针,该变量的类型,自然就是指针类型。 指针的作用就是,给出一个指针,取出该指针指向地址处的值。为了理解本质,我们从计算机模型说起...
为什么你学不过动态规划?告别动态规划,谈谈我的经验
动态规划难吗?说实话,我觉得很难,特别是对于初学者来说,我当时入门动态规划的时候,是看 0-1 背包问题,当时真的是一脸懵逼。后来,我遇到动态规划的题,看的懂答案,但就是自己不会做,不知道怎么下手。就像做递归的题,看的懂答案,但下不了手,关于递归的,我之前也写过一篇套路的文章,如果对递归不大懂的,强烈建议看一看:为什么你学不会递归,告别递归,谈谈我的经验 对于动态规划,春招秋招时好多题都会用到动态...
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外...
字节跳动面试官这样问消息队列:分布式事务、重复消费、顺序消费,我整理了一下
你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图、个人联系方式和人才交流群,欢迎Star和完善 前言 消息队列在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在消息队列的使用和原理方面对小伙伴们进行360°的刁难。 作为一个在互联网公司面一次拿一次Offer的面霸...
如何安装 IntelliJ IDEA 最新版本——详细教程
IntelliJ IDEA 简称 IDEA,被业界公认为最好的 Java 集成开发工具,尤其在智能代码助手、代码自动提示、代码重构、代码版本管理(Git、SVN、Maven)、单元测试、代码分析等方面有着亮眼的发挥。IDEA 产于捷克,开发人员以严谨著称的东欧程序员为主。IDEA 分为社区版和付费版两个版本。 我呢,一直是 Eclipse 的忠实粉丝,差不多十年的老用户了。很早就接触到了 IDEA...
面试还搞不懂redis,快看看这40道面试题(含答案和思维导图)
Redis 面试题 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性...
大学四年自学走来,这些珍藏的「实用工具/学习网站」我全贡献出来了
知乎高赞:文中列举了互联网一线大厂程序员都在用的工具集合,涉及面非常广,小白和老手都可以进来看看,或许有新收获。
为什么要推荐大家学习字节码?
配套视频: 为什么推荐大家学习Java字节码 https://www.bilibili.com/video/av77600176/ 一、背景 本文主要探讨:为什么要学习 JVM 字节码? 可能很多人会觉得没必要,因为平时开发用不到,而且不学这个也没耽误学习。 但是这里分享一点感悟,即人总是根据自己已经掌握的知识和技能来解决问题的。 这里有个悖论,有时候你觉得有些技术没用恰恰是...
【超详细分析】关于三次握手与四次挥手面试官想考我们什么?
在面试中,三次握手和四次挥手可以说是问的最频繁的一个知识点了,我相信大家也都看过很多关于三次握手与四次挥手的文章,今天的这篇文章,重点是围绕着面试,我们应该掌握哪些比较重要的点,哪些是比较被面试官给问到的,我觉得如果你能把我下面列举的一些点都记住、理解,我想就差不多了。 三次握手 当面试官问你为什么需要有三次握手、三次握手的作用、讲讲三次三次握手的时候,我想很多人会这样回答: 首先很多人会先讲下握...
压测学习总结(1)——高并发性能指标:QPS、TPS、RT、吞吐量详解
一、QPS,每秒查询 QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。 二、TPS,每秒事务 TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一...
新程序员七宗罪
当我发表这篇文章《为什么每个工程师都应该开始考虑开发中的分析和编程技能呢?》时,我从未想到它会对读者产生如此积极的影响。那些想要开始探索编程和数据科学领域的人向我寻求建议;还有一些人问我下一篇文章的发布日期;还有许多人询问如何顺利过渡到这个职业。我非常鼓励大家继续分享我在这个旅程的经验,学习,成功和失败,以帮助尽可能多的人过渡到一个充满无数好处和机会的职业生涯。亲爱的读者,谢谢你。 -罗伯特。 ...
2019年Spring Boot面试都问了什么?快看看这22道面试题!
Spring Boot 面试题 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Spring Boot 中禁用 Actuator 端点安全性? 7、如何在自定义端口上运行 Sprin...
【图解】记一次手撕算法面试:字节跳动的面试官把我四连击了
字节跳动这家公司,应该是所有秋招的公司中,对算法最重视的一个了,每次面试基本都会让你手撕算法,今天这篇文章就记录下当时被问到的几个算法题,并且每个算法题我都详细着给出了最优解,下面再现当时的面试场景。看完一定让你有所收获 一、小牛试刀:有效括号 大部分情况下,面试官都会问一个不怎么难的问题,不过你千万别太开心,因为这道题往往可以拓展出更多有难度的问题,或者一道题看起来很简单,但是给出最优解,确实很...
面试官:关于Java性能优化,你有什么技巧
通过使用一些辅助性工具来找到程序中的瓶颈,然后就可以对瓶颈部分的代码进行优化。 一般有两种方案:即优化代码或更改设计方法。我们一般会选择后者,因为不去调用以下代码要比调用一些优化的代码更能提高程序的性能。而一个设计良好的程序能够精简代码,从而提高性能。 下面将提供一些在JAVA程序的设计和编码中,为了能够提高JAVA程序的性能,而经常采用的一些方法和技巧。 1.对象的生成和大小的调整。 J...
【图解算法面试】记一次面试:说说游戏中的敏感词过滤是如何实现的?
版权声明:本文为苦逼的码农原创。未经同意禁止任何形式转载,特别是那些复制粘贴到别的平台的,否则,必定追究。欢迎大家多多转发,谢谢。 小秋今天去面试了,面试官问了一个与敏感词过滤算法相关的问题,然而小秋对敏感词过滤算法一点也没听说过。于是,有了下下事情的发生… 面试官开怼 面试官:玩过王者荣耀吧?了解过敏感词过滤吗?,例如在游戏里,如果我们发送“你在干嘛?麻痹演员啊你?”,由于“麻痹”是一个敏感词,...
GitHub 标星 1.6w+,我发现了一个宝藏项目,作为编程新手有福了!
大家好,我是 Rocky0429,一个最近老在 GitHub 上闲逛的蒟蒻… 特别惭愧的是,虽然我很早就知道 GitHub,但是学会逛 GitHub 的时间特别晚。当时一方面是因为菜,看着这种全是英文的东西难受,不知道该怎么去玩,另一方面是一直在搞 ACM,没有做一些工程类的项目,所以想当然的以为和 GitHub 也没什么关系(当然这种想法是错误的)。 后来自己花了一个星期看完了 Pyt...
杭漂程序员2019的心路历程,还不起助学贷款,交不起房租,披荆斩棘终雨过天晴
一个杭漂2019的心酸历程,一路披荆斩棘终于还是雨过天晴。
我采访了同事,让他掏出了每天都会浏览的干货网站
前言只有光头才能变强。文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y在周六的晚上,我日常去到公司写文章。想写...
Java知识体系最强总结(2020版)
更新于2019-12-15 10:38:00 本人从事Java开发已多年,平时有记录问题解决方案和总结知识点的习惯,整理了一些有关Java的知识体系,这不是最终版,会不定期的更新。也算是记录自己在从事编程工作的成长足迹,通过博客可以促进博主与阅读者的共同进步,结交更多志同道合的朋友。特此分享给大家,本人见识有限,写的博客难免有错误或者疏忽的地方,还望各位大佬指点,在此表示感激不尽。 文章目录...
计算机专业的书普遍都这么贵,你们都是怎么获取资源的?
介绍几个可以下载编程电子书籍的网站。 1.Github Github上编程书资源很多,你可以根据类型和语言去搜索。推荐几个热门的: free-programming-books-zh_CN:58K 星的GitHub,编程语言、WEB、函数、大数据、操作系统、在线课程、数据库相关书籍应有尽有,共有几百本。 Go语言高级编程:涵盖CGO,Go汇编语言,RPC实现,Protobuf插件实现,Web框架实...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
相关热词 c#如何定义数组列表 c#倒序读取txt文件 java代码生成c# c# tcp发送数据 c#解决时间格式带星期 c#类似hashmap c#设置istbox的值 c#获取多线程返回值 c# 包含数字 枚举 c# timespan
立即提问