菜鸟飞行记——一、基础得不能再基础的知识记录

平时的小积累

  • VPN是什么东西
    虚拟专用网络,用于加密通讯
  • tomcat连不上会执行缓存
    做法:将项目从部署中删掉,然后删掉tomcat安装目录下work-Catalina-localhost目录 Refresh一下项目
  • 当项目部署成功后,启动tomcat时,发现走到第一个线程的地方就停掉了
    这个原因有可能是jdk版本问题,高版本和低版本不兼容,可以问同事用的jdk是哪个版本
  • 莫名的错误
    奇怪的现象: 今天把原来已经完成的一个查询页面打开,居然出现了莫名的错误,原来打开是正常的,还能查询出数据,可是现在却报错。而且在加断点调试时,有时候查出来的数据是6条,可是有时候数据为空,这个时候就会报空指针异常;有时候查出来的数据是0条,不报错。
    解决过程:先看了看数据库有没有数据,看到我要查的表里有6条数据,但是我想要这些数据中的字段信息都为空,导致框架将传回来的数据封装到一个类的时候,没有成功,就是说,在最后返回的集合中的每个实体类都是空的。而在代码后面,还会取该类的一些属性值,这样就导致空指针异常。这就是问题所在!随后对代码做了修改,对传回来的列表中的对象进行判断,如果为空,则没有继续取属性值的必要了。这样问题才得以解决。。。。

  • 一个危险的操作
    一个困扰我很长时间的异常

Myeclipse6.5+tomcat5.5
我在使用 myeclipse的过程中,tomcat处于启动状态,正在编辑,打开一个文件时,myeclipse卡了,我以为只是正常的卡壳,可 是,myeclipse闪退了,此后不管启动多少次,都会报一下错误。。怎么解决。。。
我修改 server.xml的端口 把8080 等其他端口都试着改过
可是依然抱这个错误
http://127.0.0.1:8080/
这个网址可以正常显示
2010-5-18 22:00:38 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信 息: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files \Java\jdk1.6.0_10\bin;D:\Tomcat 5.5\bin
2010-5-18 22:00:38 org.apache.coyote.http11.Http11AprProtocol init
严重: Error initializing endpoint
java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??
at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:576)
at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprProtocol.java:116)
at org.apache.catalina.connector.Connector.initialize(Connector.java:1017)
at org.apache.catalina.core.StandardService.initialize(StandardService.java:578)
at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:782)
at org.apache.catalina.startup.Catalina.load(Catalina.java:504)
at org.apache.catalina.startup.Catalina.load(Catalina.java:524)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:267)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
2010-5-18 22:00:38 org.apache.catalina.startup.Catalina load
严重: Catalina.start
LifecycleException: Protocol handler initialization failed: java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??
at org.apache.catalina.connector.Connector.initialize(Connector.java:1019)
at org.apache.catalina.core.StandardService.initialize(StandardService.java:578)
at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:782)
at org.apache.catalina.startup.Catalina.load(Catalina.java:504)
at org.apache.catalina.startup.Catalina.load(Catalina.java:524)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:267)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432)
2010-5-18 22:00:38 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 390 ms
2010-5-18 22:00:38 org.apache.catalina.core.StandardService start
信息: Starting service Catalina
2010-5-18 22:00:38 org.apache.catalina.core.StandardEngine start
信息: Starting Servlet Engine: Apache Tomcat/5.5.28
2010-5-18 22:00:38 org.apache.catalina.core.StandardHost start
信息: XML validation disabled
2010-5-18 22:00:38 org.apache.catalina.core.ApplicationContext log
信 息: org.apache.webapp.balancer.BalancerFilter: init(): ruleChain: [org.apache.webapp.balancer.RuleChain: [org.apache.webapp.balancer.rules.URLStringMatchRule: Target string: News / Redirect URL: http: //www.cnn.com], [org.apache.webapp.balancer.rules.RequestParameterRule: Target param name: paramName / Target param value: paramValue / Redirect URL: http: //www.yahoo.com], [org.apache.webapp.balancer.rules.AcceptEverythingRule: Redirect URL: http: //jakarta.apache.org]]
2010-5-18 22:00:39 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
2010-5-18 22:00:39 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
2010-5-18 22:00:39 org.apache.catalina.core.ApplicationContext log
信息: ContextListener: contextInitialized()
2010-5-18 22:00:39 org.apache.catalina.core.ApplicationContext log
信息: SessionListener: contextInitialized()
2010-5-18 22:00:39 org.apache.coyote.http11.Http11AprProtocol start
严重: Error starting endpoint
java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??
at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:576)
at org.apache.tomcat.util.net.AprEndpoint.start(AprEndpoint.java:686)
at org.apache.coyote.http11.Http11AprProtocol.start(Http11AprProtocol.java:146)
at org.apache.catalina.connector.Connector.start(Connector.java:1090)
at org.apache.catalina.core.StandardService.start(StandardService.java:457)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
2010-5-18 22:00:39 org.apache.catalina.startup.Catalina start
严重: Catalina.start:
LifecycleException: service.getName(): “Catalina”; Protocol handler start failed: java.lang.Exception: Socket bind failed: [730048] ?????????×???(Э?é/???????/???)????í??
at org.apache.catalina.connector.Connector.start(Connector.java:1097)
at org.apache.catalina.core.StandardService.start(StandardService.java:457)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
2010-5-18 22:00:39 org.apache.catalina.startup.Catalina start
信息: Server startup in 1110 ms

源文档 http://weibo.com/ttarticle/p/show?id=2309404017457214917195

解决过程:第一次出现这个错误的时候,以为是端口号冲突了,改了tomcat端口号也还是不行 ,后来就把MyEclipse卸掉重新装。后来又出现这个错误,就在网上搜解决办法,有一个办法是把javaw.exe的程序关掉,这样果真好了,可是启动项目的时候没有报上面的错误,报了一个新的错误——IO异常。最后才知道引起这个错误的原因之一是服务器没有连接成功数据库。只要把Javaw.exe程序启动就可以了。后面就正常了。。。

  • SVN
    需要再myeclipse或者Eclipse中加个文件夹(eclipse-svn-plugin)再打开myeclipse和eclipse就可以了
  • 自增主键-序列
    Oracle中没有发现自增这个功能,可以新建一个与之对应的序列,每次给主键赋值时可以LOAN_FAMILY_SEQ.nextval
    1、创建、删除
    create sequence seq_newsId
    increment by 1
    start with 1
    maxvalue 999999999;
    2、得到序列的SQL语句
    select seq_newsid.nextval from sys.dual;
    3、删除序列的SQL
    DROP SEQUENCE seq_newsId;

  • trunc函数
    其具体的语法格式如下:
    TRUNC(date,[fmt])
    其中:
    date 为必要参数,是输入的一个日期值
    fmt 参数可忽略,是日期格式,用以指定的元素格式来截去输入的日期值。忽略它则由最近的日期截去
    下面是该函数的使用情况:
    trunc(sysdate,’yyyy’) –返回当年第一天.
    trunc(sysdate,’mm’) –返回当月第一天.
    trunc(sysdate,’d’) –返回当前星期的第一天.

  • 登不上key
    有可能是在IE的工具中的internet选项中高级那一项的里面有的不该勾上—————————这个可让我头疼了很久,差点重装系统

  • HTML页面跳转的5种方法
    1) html的实现
 <head>
<!-- 以下方式只是刷新不跳转到其他页面 -->
<meta http-equiv="refresh" content="10">
<!-- 以下方式定时转到其他页面 -->
<meta http-equiv="refresh" content="5;url=hello.html"> 
</head>

优点:简单
缺点:Struts Tiles中无法使用
2) javascript的实现

<script language="javascript" type="text/javascript"> 
// 以下方式直接跳转
window.location.href='hello.html';
// 以下方式定时跳转
setTimeout("javascript:location.href='hello.html'", 5000); 
</script>

优点:灵活,可以结合更多的其他功能
缺点:受到不同浏览器的影响
3) 结合了倒数的javascript实现(IE)

<span id="totalSecond">5</span>
<script language="javascript" type="text/javascript"> 
var second = totalSecond.innerText; 
setInterval("redirect()", 1000); 
function redirect(){ 
totalSecond.innerText=--second; 
if(second<0) location.href='hello.html'; 
} 
</script>

优点:更人性化
缺点:firefox不支持(firefox不支持span、div等的innerText属性)
3’) 结合了倒数的javascript实现(firefox)

<script language="javascript" type="text/javascript"> 
var second = document.getElementById('totalSecond').textContent; 
setInterval("redirect()", 1000); 
function redirect() 
{ 
document.getElementById('totalSecond').textContent = --second; 
if (second < 0) location.href = 'hello.html'; 
} 
</script>

4) 解决Firefox不支持innerText的问题

<span id="totalSecond">5</span>
<script language="javascript" type="text/javascript"> 
if(navigator.appName.indexOf("Explorer") > -1){ 
document.getElementById('totalSecond').innerText = "my text innerText"; 
} else{ 
document.getElementById('totalSecond').textContent = "my text textContent"; 
} 
</script>

5) 整合3)和3’)

<span id="totalSecond">5</span>

<script language="javascript" type="text/javascript"> 
var second = document.getElementById('totalSecond').textContent; 

if (navigator.appName.indexOf("Explorer") > -1)  { 
    second = document.getElementById('totalSecond').innerText; 
} else { 
    second = document.getElementById('totalSecond').textContent; 
} 

setInterval("redirect()", 1000); 
function redirect() { 
if (second < 0) { 
    location.href = 'hello.html'; 
} else { 
    if (navigator.appName.indexOf("Explorer") > -1) { 
        document.getElementById('totalSecond').innerText = second--; 
    } else { 
        document.getElementById('totalSecond').textContent = second--; 
    } 
} 
} 
</script>
  • Map转json,json转Map
JSONObject json = new JSONObject(); 
json.putAll(map);
String jString = json.toString().replaceAll("\"", "'");
 ===========================================================
Map<String, Object> formJson = new HashMap<String,Object>();
JSONObject jsonObject = JSONObject.fromObject(submitMap.get("formData"));
formJson = JSONObject.fromObject(jsonObject);  
  • 表被锁了
    通过vlockedobject和vsession查看下你sc_tt_stock表是否被其它session锁住了
--首先查看有哪些锁
select /*+ rule */ s.username,
      decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK',null) lock_level,
      o.owner,
      o.object_name,
      o.object_type,
      s.sid,s.serial#,
      s.terminal,
      s.machine,
      s.program,
      s.osuser
from v$session s,v$lock l,dba_objects o
where l.sid = s.sid
and l.id1 = o.object_id(+)
and s.username is not null
--如果发生了锁等待,看是谁锁了表而引起谁的等待
--以下的语句可以查询到谁锁了表,而谁在等待。 如果有子节点,则表示有等待发生
select /*+ rule */ lpad(' ',decode(l.xidusn ,0,3,0))||l.oracle_username user_name,
       o.owner,
       o.object_name,
       o.object_type,
       s.sid,
       s.serial#
from v$locked_object l,dba_objects o,v$session s
where l.object_id=o.object_id
and l.session_id=s.sid
order by o.object_id,xidusn desc
--找到引起等待的session,杀掉该session: 
alter system kill session 'sid,serial#';
查询到谁锁了表,而谁在等待时,结果类似于 
–执行结果只有1条
--1    CRP    ROW LOCK    null    null    null    554    53236    LENOVO-C1E06E80    WORKGROUP\LENOVO-C1E06E80    plsqldev.exe    Administrator

然后再执行
alter system kill session '554,53236';

执行该sql后,就没有锁了。。

  • Logger
Logger logger  = Logger.getLogger(StartEventService.class);
logger.info(message);
logger.error(message);
  • $.ajax
$.ajax({
url:"workflow!updateBusiness.do",
type : "POST",
cache : false,
 data:dataJson,
success : function(text) {
alert("审批完成");
},
error : function(jqXHR, textStatus, errorThrown) {
mini.alert("处理错误: " + textStatus + " 详细内容: " + errorThrown);
 }
});    
  • 服务端页面跳转
@RequestMapping(value="/CustomInfoUploadAction!upload",produces = "application/json;charset=UTF-8")
public ModelAndView upload(HttpServletRequest request,HttpServletResponse response){
ModelAndView modelAndView = new ModelAndView("ebank/loan/CustomInfoUpload");
modelAndView.addObject("type", request.getParameter("type"));
modelAndView.addObject("infoType",request.getParameter("infoType"));
    return modelAndView;
}
  • 日期和字符串之间的转换
import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class ConvertDemo {
/**
* 日期转换成字符串
* @param date 
* @return str
*/
public static String DateToStr(Date date) {

   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   String str = format.format(date);
   return str;
} 

/**
* 字符串转换成日期
* @param str
* @return date
*/
public static Date StrToDate(String str) {

   SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   Date date = null;
   try {
    date = format.parse(str);
   } catch (ParseException e) {
    e.printStackTrace();
   }
   return date;
}

public static void main(String[] args) {

   Date date = new Date();
   System.out.println("日期转字符串:" + ConvertDemo.DateToStr(date));
   System.out.println("字符串转日期:" + ConvertDemo.StrToDate(ConvertDemo.DateToStr(date)));

}
}
  • 按钮
<input type="button"  value="【上传】" onclick="upload('XJLL')" style="width: 100%" />
//全不可用
var controls = document.getElementsByTagName('input');
                          for(var i=0; i<controls.length; i++){
                            if(controls[i].type=='button'){
                                     controls[i].disabled=true;
                            }
                          }
  • StringBuilder
    StringBuilder jsonString = new StringBuilder(200);
    jsonString.append(“[“);
    //获取所有的许可
    List permissions = permissionDao.getAll();
    for (Permission permission : permissions) {
    String pId = permission.getPid()==null?”0”:permission.getPid();
    jsonString.append(“{\”id\”:\”“+permission.getId()+”\”,\”pId\”:\”“+pId+”\”,\”name\”:\”“+permission.getName()+”\”},”);
    }
    jsonString.append(“]”);

jsonString.toString().replace(“,]”, “]”);

  • PLSql
    D:\Tools\instantclient_12_1
    D:\Tools\instantclient_12_1\oci.dll
    注册码:
    Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz
    serial Number:601769
    password:xs374ca

  • js中字符串去掉双引号

userstrs[j] = userstrs[j].replace(/\"/g, "");
  • 回滚SSM
@Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = Exception.class)
  • 解析javascript 数组以及json元素的添加删除
    javasscript删除数组的3种方法
    1,用shift()方法
    shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined
var chaomao=[1,2,3,4,5]
var chaomao.shift()//得到1
alert(chaomao)//[2,3,4,5]

2,用pop()方法
pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined

var chaomao=[1,2,3,4,5]
var chaomao.pop()//得到5
alert(chaomao)//[1,2,3,4]

前面的方法只能操作数组开头和结尾,无法操作中间项,如果要操作中间的项,使用splice方法
3,用splice方法
这个方法很强大,可以对数组任意项进行增加,删除,替换操作
修改操作:

var chaomao=[1,2,3,4,5]
chaomao.splice(2,1,8,9)
alert(chaomao)//1,2,8,9,4,5

第一个参数是准备操作的数组位置,第二个参数是操作位置后面的数组项数,第三个以后的就是,被替换后的内容
例子就是表示:从chaomao这个数组位置2开始(也就是值为3的那一项,数组下标从0开始的),位置2后的一项,替换成成8,9
如果把第二个参数改为2,也就是chaomao.splice(2,2,8,9),也就是说位置2后面的两项换成8,9,打印出来的结果就是1,2,8,9,5,3和4这2两项被换掉了
这里需要说明的是,被替换的项数不一定要和替换的项数相等,1项可以被换成3项,5项也可以被换成2项,基于这个原理,我们就用这个方法来对数组进行添加和删除操作
删除操作:

var chaomao=[1,2,3,4,5]
chaomao.splice(2,1)
alert(chaomao)//1,2,4,5

上面例子中,把chaomao中的位置2后的1项替换成空的,因为后面没有内容,结果可以看到,把3这项删除了
添加操作:

var chaomao=[1,2,3,4,5]
chaomao.splice(2,0,8,9)
alert(chaomao)//1,2,8,9,3,4,5

上面例子中,把chaomao中位置2后的0项换成8,9,也就等于添加了两项
其实,删除和添加操作都只是splice修改方法的两种衍生罢了

  • javasscript删除对象的方法
js中删除对象元素用delete操作符
我们来看看一个例子
复制代码 代码如下:
var p ={
"name": “chaomao”,
"age":45,
"sex":"male"
};
delete p.name
for(var i in p){
console.log(i);//输出age,sex,name项已经被删除了
}
  • 添加json元素的方法
复制代码 代码如下:
var json = {}; // 如果json已经定义就跳过
json[text] = value;
json.text2 = value2;  // 此时text2必须符合变量名标准,否则得使用数组方式赋值
  • ModelAndView

ModelAndView modelAndView = new ModelAndView(“ebank/loan/custominfo/CustomInfoUpload”);
modelAndView.addObject(“type”, request.getParameter(“type”));

  • stringObject.substring(start,stop)
  • ^=
    $(“input[id^=’code’]”);//id属性以code开始的所有input标签

  • $.ajaxFileUpload

$.ajaxFileUpload({  
                    url:'CustomInfoUploadAction!infoUpload.do?type='+type+'&infoType='+infoType+'&month='+month,  
                    secureuri:false,  
                    fileElementId: arrId,  //这里不在是以前的id了,要写成数组的形式哦!  
                    dataType: 'text',  
                    success: function (data){   
                        if(data=="1"){
                            mini.alert("上传成功","提醒",function(){
                                CloseWindow("ok");
                            });
                        } else {
                            mini.alert("上传失败!");
                        };
                    },
                    error : function(data) {
                            mini.alert("上传失败!");
                    }
                });

1、url           上传处理程序地址。  
2,fileElementId      需要上传的文件域的ID,即的ID。
3,secureuri        是否启用安全提交,默认为false。
4,dataType        服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。
5,success        提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
6,error          提交失败自动执行的处理函数。
7,data           自定义参数。这个东西比较有用,当有数据是与上传的图片相关的时候,这个东西就要用到了。
8, type           当要提交自定义参数时,这个参数要设置成post
错误提示:
1,SyntaxError: missing ; before statement错误
  如果出现这个错误就需要检查url路径是否可以访问
2,SyntaxError: syntax error错误
  如果出现这个错误就需要检查处理提交操作的服务器后台处理程序是否存在语法错误
3,SyntaxError: invalid property id错误
  如果出现这个错误就需要检查文本域属性ID是否存在
4,SyntaxError: missing } in XML expression错误
  如果出现这个错误就需要检查文件name是否一致或不存在
5,其它自定义错误
  大家可使用变量$error直接打印的方法检查各参数是否正确,比起上面这些无效的错误提示还是方便很多。

<script src="ajaxfileupload.js" type="text/javascript"></script>

http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html

var arrId = [];  
            for (var i=0; i< uplist.length; i++){  
                    if(uplist[i].value){  
                        arrId[i] = uplist[i].id;  
                    };  
               }


CustomInfoUploadAction!infoUpload


response.setContentType("text/html;chartset=UTF-8");
        response.setCharacterEncoding("UTF-8");

SpringMVC 文件上传MultipartHttpServletRequest

  • 分目录
private String makePath(String filename, String savePath) {
        // 得到文件名的hashCode的值,得到的就是filename这个字符串对象在内存中的地址
        int hashcode = filename.hashCode();
        int dir1 = hashcode & 0xf; // 0--15
        int dir2 = (hashcode & 0xf0) >> 4; // 0-15
        // 构造新的保存目录
        String dir = savePath  + dir1 + File.separator + dir2; // upload\2\3
                                                            // upload\3\5
        // File既可以代表文件也可以代表目录
        File file = new File(dir);
        // 如果目录不存在
        if (!file.exists()) {
            // 创建目录
            file.mkdirs();
        }
        return dir;
    }
  • 查询序列的下一个值
SELECT SEQ_LIUDAI_LOAD.NEXTVAL FROM DUAL;
  • Decode

http://www.cnblogs.com/freespider/archive/2010/08/09/1795977.html

select decode(sign(变量1-变量2),-1,变量1,变量2) from dual;
  • oracle查用户所有的表
select table_name from user_tables;
  • listagg函数
    原始
select * from loan_client_info!

这里写图片描述
使用listagg达到的效果

select listagg(unit_code,',')within group(order by status) as aa from loan_client_info

这里写图片描述
- SVN不能更新文件,出现锁了,该怎么办?
这里写图片描述
找到工作空间,打开lib文件夹
搜索文件lock开头的,,全部删掉
这个lock开头的文件 眼睛看不见,它们是隐藏起来的

  • 415错误
    你想要请求一个方法,这个方法需要传map类型的参数(哪怕是空的呢),你什么都没有传入,就报错415.

  • Oracle关联主键

alter table tablename add constraint unionkeyname primary key (column1,column2);

上面语句中:
tablename为要添加联合约束的表
unionkeyname为添加的联合约束的名称
column1,column2为联合主键作用的两个列列名
- 将json转为字符串js

var last=JSON.stringify(dataArray);
  • 为json增加元素js
var dataArray = [];
            for(var i=0;i<rows.length;i++){
                var INFO_DATE = rows[i].INFO_DATE;
                var DATA_TYPE = rows[i].DATA_TYPE;
                var arr = {"INFO_DATE":INFO_DATE,"DATA_TYPE":DATA_TYPE};
                dataArray.push(arr);
                updateStatus(dataArray);
            }
  • 写过的最长的sql:
select wup.STARTID,wup.taskid,whte.taskid,
'第'||to_char(wup.node)||'步',
case
  when
whte.taskid in (select taskid from WORKFLOW_HIS_TASK_EVENT)
then whte.operator
  else wup.operators end as operator, 
 wup.DESCRIBTION, whte.LASTCHANGE, 
 case 
   when whte.taskid in (select taskid from WORKFLOW_HIS_TASK_EVENT)
  then whte.SUGGESTION else '未复核' end as status

    from WORKFLOW_USERS_MAP wup left join WORKFLOW_HIS_TASK_EVENT whte on wup.taskid = whte.taskid
  order by wup.startid,wup.NODE
  • 产生随机数
/*
** randomWord 产生任意长度随机字母数字组合
** randomFlag-是否任意长度 min-任意长度最小位[固定位数] max-任意长度最大位
** xuanfeng 2014-08-28
*/

function randomWord(randomFlag, min, max){
    var str = "",
        range = min,
        arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];

    // 随机产生
    if(randomFlag){
        range = Math.round(Math.random() * (max-min)) + min;
    }
    for(var i=0; i<range; i++){
        pos = Math.round(Math.random() * (arr.length-1));
        str += arr[pos];
    }
    return str;
}
  • 时间戳
/* 
     * 将时间戳转换为时间
     */
    public static String stampToDate(String s){
        String res;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        long lt = new Long(s);
        Date date = new Date(lt);
        res = simpleDateFormat.format(date);
        return res;
}
  • join
<script type="text/javascript">

var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"

document.write(arr.join())

</script>

输出:

George,John,Thomas
<script type="text/javascript">

var arr = new Array(3)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"

document.write(arr.join("."))

</script>

输出:

George.John.Thomas
private List<CommonBusinessBean> convertMap(List<Map<String, Object>> list) {
        List<CommonBusinessBean> resultList = new ArrayList<CommonBusinessBean>();
        if (list != null && list.size() > 0) {
            for (Map<String, Object> item : list) {
                CommonBusinessBean bean = new CommonBusinessBean();
                Set<String> keys = item.keySet();
                for (String key : keys) {
                    if (!key.equals("ss")) {
                        bean.add(new KeyValueBean(key, String.valueOf(item.get(key))));
                    }
                }
                resultList.add(bean);
            }
        }
        return resultList;
    }
  • 一堆原则
    1. 单一职责原则(Single Responsibility Principle - SRP)
      原文:There should never be more than one reason for a class to change.
      译文:永远不应该有多于一个原因来改变某个类。
      理解:对于一个类而言,应该仅有一个引起它变化的原因。说白了就是,不同的类具备不同的职责,各施其责。这就好比一个团队,大家分工协作,互不影响,各做各的事情。
      应用:当我们做系统设计时,如果发现有一个类拥有了两种的职责,那就问自己一个问题:可以将这个类分成两个类吗?如果真的有必要,那就分吧。千万不要让一个类干的事情太多!
    2. 开放封闭原则(Open Closed Principle - OCP)
      原文:Software entities like classes, modules and functions should be open for extension but closed for modifications.
      译文:软件实体,如:类、模块与函数,对于扩展应该是开放的,但对于修改应该是封闭的。
      理解:简言之,对扩展开放,对修改封闭。换句话说,可以去扩展类,但不要去修改类。
      应用:当需求有改动,要修改代码了,此时您要做的是,尽量用继承或组合的方式来扩展类的功能,而不是直接修改类的代码。当然,如果能够确保对整体架构不会产生任何影响,那么也没必要搞得那么复杂了,直接改这个类吧。
    3. 里氏替换原则(Liskov Substitution Principle - LSP)
      原文:Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.
      译文:使用基类的指针或引用的函数,必须是在不知情的情况下,能够使用派生类的对象。
      理解:父类能够替换子类,但子类不一定能替换父类。也就是说,在代码中可以将父类全部替换为子类,程序不会报错,也不会在运行时出现任何异常,但反过来却不一定成立。
      应用:在继承类时,务必重写(Override)父类中所有的方法,尤其需要注意父类的 protected 方法(它们往往是让您重写的),子类尽量不要暴露自己的 public 方法供外界调用。
      该原则由麻省理工学院的 Barbara Liskov 女士提出,她是美国第一位获取计算机博士学位的女性,曾经也获得过计算机图灵奖。
    4. 最少知识原则(Least Knowledge Principle - LKP)
      原文:Only talk to you immediate friends.
      译文:只与你最直接的朋友交流。
      理解:尽量减少对象之间的交互,从而减小类之间的耦合。简言之,一定要做到:低耦合,高内聚。
      应用:在做系统设计时,不要让一个类依赖于太多的其他类,需尽量减小依赖关系,否则,您死都不知道自己怎么死的。
      该原则也称为“迪米特法则(Law of Demeter)”,由 Ian Holland 提出。这个人不太愿意和陌生人说话,只和他走得最近的朋友们交流。
    5. 接口隔离原则(Interface Segregation Principle - ISP)
      原文:The dependency of one class to another one should depend on the smallest possible interface.
      译文:一个类与另一个类之间的依赖性,应该依赖于尽可能小的接口。
      理解:不要对外暴露没有实际意义的接口。也就是说,接口是给别人调用的,那就不要去为难别人了,尽可能保证接口的实用性吧。她好,我也好。
      应用:当需要对外暴露接口时,需要再三斟酌,如果真的没有必要对外提供的,就删了吧。一旦您提供了,就意味着,您将来要多做一件事情,何苦要给自己找事做呢。
    6. 依赖倒置原则(Dependence Inversion Principle - DIP)
      原文:High level modules should not depends upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.
      译文:高层模块不应该依赖于低层模块,它们应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。
      理解:应该面向接口编程,不应该面向实现类编程。面向实现类编程,相当于就是论事,那是正向依赖(正常人思维);面向接口编程,相当于通过事物表象来看本质,那是反向依赖,即依赖倒置(程序员思维)。
      应用:并不是说,所有的类都要有一个对应的接口,而是说,如果有接口,那就尽量使用接口来编程吧。
      将以上六大原则的英文首字母拼在一起就是 SOLID(稳定的),所以也称之为 SOLID 原则。
      只有满足了这六大原则,才能设计出稳定的软件架构!但它们毕竟只是原则,只是四人帮给我们的建议,有些时候我们还是要学会灵活应变,千万不要生搬硬套,否则只会把简单问题复杂化,切记!
      • 补充设计原则
    7. 组合/聚合复用原则(Composition/Aggregation Reuse Principle - CARP)
      当要扩展类的功能时,优先考虑使用组合,而不是继承。这条原则在 23 种经典设计模式中频繁使用,如:代理模式、装饰模式、适配器模式等。可见江湖地位非常之高!
    8. 无环依赖原则(Acyclic Dependencies Principle - ADP)
      当 A 模块依赖于 B 模块,B 模块依赖于 C 模块,C 依赖于 A 模块,此时将出现循环依赖。在设计中应该避免这个问题,可通过引入“中介者模式”解决该问题。
    9. 共同封装原则(Common Closure Principle - CCP)
      应该将易变的类放在同一个包里,将变化隔离出来。该原则是“开放-封闭原则”的延生。
    10. 共同重用原则(Common Reuse Principle - CRP)
      如果重用了包中的一个类,那么也就相当于重用了包中的所有类,我们要尽可能减小包的大小。
    11. 好莱坞原则(Hollywood Principle - HP)
      好莱坞明星的经纪人一般都很忙,他们不想被打扰,往往会说:Don’t call me, I’ll call you. 翻译为:不要联系我,我会联系你。对应于软件设计而言,最著名的就是“控制反转”(或称为“依赖注入”),我们不需要在代码中主动的创建对象,而是由容器帮我们来创建并管理这些对象。
      • 其他设计原则
    12. 不要重复你自己(Don’t repeat yourself - DRY)
      不要让重复的代码到处都是,要让它们足够的重用,所以要尽可能地封装。
    13. 保持它简单与傻瓜(Keep it simple and stupid - KISS)
      不要让系统变得复杂,界面简洁,功能实用,操作方便,要让它足够的简单,足够的傻瓜。
    14. 高内聚与低耦合(High Cohesion and Low Coupling - HCLC)
      模块内部需要做到内聚度高,模块之间需要做到耦合度低。
    15. 惯例优于配置(Convention over Configuration - COC)
      尽量让惯例来减少配置,这样才能提高开发效率,尽量做到“零配置”。很多开发框架都是这样做的。
    16. 命令查询分离(Command Query Separation - CQS)
      在定义接口时,要做到哪些是命令,哪些是查询,要将它们分离,而不要揉到一起。
    17. 关注点分离(Separation of Concerns - SOC)
      将一个复杂的问题分离为多个简单的问题,然后逐个解决这些简单的问题,那么这个复杂的问题就解决了。难就难在如何进行分离。
    18. 契约式设计(Design by Contract - DBC)
      模块或系统之间的交互,都是基于契约(接口或抽象)的,而不要依赖于具体实现。该原则建议我们要面向契约编程。
    19. 你不需要它(You aren’t gonna need it - YAGNI)
      不要一开始就把系统设计得非常复杂,不要陷入“过度设计”的深渊。应该让系统足够的简单,而却又不失扩展性,这是其中的难点。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值