記錄常見問題

1、常見問題html

  1. 訪問 請求參數是數組如何接受參數?前端

    //http://localhost:9090/pet/getxx?xx=aa&&xx=aa&xx=cc
     @GetMapping("getxx")
     public String getxx(String[] xx) {
     	System.out.println(aa+ Arrays.toString(xx));
  2. 如何讀取配置文件java

    1. 讀取系統的配置文件
     Properties pps = System.getProperties();
    
     //.load()能夠加載file.properties配置文件
     // Properties pps = new Properties();
     // pps.load(new FileInputStream("file.properties"));
      Enumeration fileName = pps.propertyNames();
      while (fileName.hasMoreElements()) {
      String strKey = (String) fileName.nextElement();
      String strValue = pps.getProperty(strKey);
      System.out.println(strKey + "," + strValue);
      }
    
     讀取指定文件下配置文件,例如絕對路徑qa.ini下有aa=bb就會輸出bb
     Properties property = new Properties();
     property.load(new FileInputStream("/Users/heliming/IdeaProjects/democloud/kotlindemo/qqa.ini"));
     String value = property.getProperty("aa");
     System.out.println(value);
    1. 關於反射挺有用的博文 https://www.cnblogs.com/shqnl/p/11052231.html
  3. 記一次jar包衝突mysql

    報錯有用信息linux

    NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;

    緣由: 項目中我用了springboot,而springboot依賴tomcat,avro-ipc中依賴jetty,tomcat和jetty都是servlet規範的容器,致使jetty的servlet-api和tomcat的包重複了。 最終:把avro-ipc的servlet-api包去除,只加載tomcat中的servlet-api包 nginx

  4. 帶類型轉換正確姿式git

    package top.util;
    
    	import java.net.URLDecoder;
    	import java.util.HashMap;
    	import java.util.Map;
    
    	/**
    	 * description:
    	 *
    	 * @author: dawn.he QQ:       905845006
    	 * @email: dawn.he@cloudwise.com
    	 * @email: 905845006@qq.com
    	 * @date: 2019/9/9    5:59 PM
    	 */
    	public class Aaa {
    
    		public static void main(String[] args) {
    
    			//Integer
    			HashMap m = new HashMap<String, Integer>();
    			m.put("buibui", 1);
    			//String[]
    	//        HashMap m = new HashMap<String, String[]>();
    	//        m.put("buibui", new String[]{"fsf","sfff"});
    
    			HashMap<String, String[]> parameterMap = null;
    			//map帶泛型正確複製操做
    			try {
    				if (m instanceof Map) {
    					parameterMap = m;
    				} else {
    					return;
    				}
    
    				for (Map.Entry<String, String[]> e : parameterMap.entrySet()) {
    					HashMap<String, Object> map = new HashMap<String, Object>();
    					if (e.getKey() instanceof String) {
    						String k = e.getKey();
    						map.put("name", k);
    
    					}
    					if (e.getValue() instanceof String[]) {
    						String[] vals = e.getValue();
    						//將value內容拷貝出來(防止影響原有數據),並進行URLDecoder.decode操做
    						String[] params = new String[vals.length];
    						for (int i = 0; i < vals.length; i++) {
    							String val = vals[i];
    							System.out.println(val);
    						}
    						map.put("values", params);
    
    					} else {
    
    						System.out.println("不是key:string,values:string[]類型");
    					}
    
    				}
    				//錯誤操做,直接編譯失敗
    	//            if (m instanceof Map<String, String[]>) {
    	//                parameterMap = m;
    	//            } else {
    	//                return;
    	//            }
    			} catch (Exception e) {
    				System.out.println("-------");
    				return;
    			}
    			System.out.println("0------");
    
    		}
    	}

    解析:若是m換爲stirng:string[]格式就能正常賦值github

  5. maven打包最好版本一致,否則可能出現不可控因素,例如:算法

    Error reading com/xxx/xxx/xxx.class: nullspring

    還有就是父maven最好高於子maven的jdk版本

  6. activemq安裝 https://www.cnblogs.com/wanglan/p/7690839.html

  7. Unsupported major.minor version 52.0的含義

    一、釋義:version 52.0 J2SE 8(JDK 1.8) = 52  J2SE 7(JDK 1.7) = 51  J2SE 6.0(JDK 1.6) = 50 J2SE 5.0(JDK 1.5) = 49 JDK 1.4 = 48  JDK 1.3 = 47  JDK 1.2 = 46 JDK 1.1 = 45

    二、釋義:Unsupported major.minor version 52.0 大體意思是:本地的環境不支持jdk1.8(即:所部署項目的jdk版本過高:注意是JDK版本過高而非JRE)

  8. 分支管理必定是測試完穩定版本後作升級而後加版本號。不能還沒測好直接加版本號。

  9. 分支儘可能少,多了很難維護,並且最大弊端是有些不能合併,影響開發效率。

  10. 打印日誌的時候,方法開始和結束須要打印日誌,打印日誌必定要打印組裝完成的數據。若是其中一些邏輯複雜也要打印日誌。(補充:額外須要打印時間(打印毫秒,若是執行速度過快打印納秒)和線程id)

  11. 測試的時候必定要規範,好比在那臺機器上測試,測試內容,服務器帳號密碼,測完的例子啓動方式,如何出現的bug,日誌要保留下來,方便研發找問題,若是不記錄的後果就是,還得重新再測一遍看日誌,看項目的日誌,若是環境掛掉了,還得從新看環境的問題,可能第一次測試就白測試了,還會浪費時間。

  12. 代碼裏邊的一些常量,若是屬於一類的,最好作區分,

    例如:
     public interface Constant {
    
     /**
      * 公共常量
      */
     class Public {
     	public static final String ID = "TESTID";
     }
    
     /**
      * JSP路徑
      */
     class JspFilePath {
     	public static final String TESTCONTROLLER = "jsp/basic/";
     	public static final String TEMPLATE_PAGEPATH = "basic/template/"; // 模板(測試)
    
    
     }

    }

  13. 分析問題先從面分析,再從點分析,各個方面都分析完成後,逐個點擊破。

  14. 多線程問題總結:

    若是是多線程應該是一個主線程作數據組裝,各個子線程作數據處理,這樣的話在主線程哪裏作數據抓取是很是有必要的,若是子線程數據須要抓取,只須要在子線程抓取完數據後,跟主線程串聯起來就能夠了。由於線程也是堆棧作的,上下級是有關聯的。

  15. Integer 判斷判斷對象null 判斷intValue()不爲0

  16. bean拷貝

    幾個集合不能共用一個bean(若是共用了數據只有一份更改全部的都會更改須要拷貝或者新new bean)
  17. Integer不能和String用equlse比較

    轉string或者都轉int
     轉String s = Integer.toString(wmAnswerLabel.getId())用equalse
     Integer類型的要轉換爲int用==
     轉int a1=a.intValue();
     String轉int
     i=Integer.parseInt(s1);
  18. 二維碼條形碼字符串長度漢字計算jsonjava互轉

    http://www.ofmonkey.com
  19. 用mybatis mapper 修改多條sql的時候提示sql語句出錯

    配置拼接參數加&allowMultiQueries=true
     jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true
     若是是用的德魯伊數據庫,還須要配置
       WallConfig wc = new WallConfig();
     	 wc.setMultiStatementAllow(true); //容許一次執行多條語句
     			wc.setNoneBaseStatementAllow(true); //容許一次執行多條語句

18/12/25

  1. BeyondCompareV423 好用的比較文件差別工具

18/12/26

  1. 若是導出svn項目出錯別人導出svn項目正確,而且報一些稀奇古怪的問題,從新打開一個可用的idea工做空間(刪除原先的文件夾從新建立個)導出svn,多是idea工具的問題

  2. 導出項目的時候若是編譯不成功clean下把targe包清除了繼續編譯編譯仍是不成功,若是錯誤根本不知道就換工做空間吧。

18/1/7

  1. maven pom.xml若是是錯的,deploy後maven是不會從私服下載新的jar包的

  2. 若是deploy項目依賴的私服必須是同一個 就是多個項目的maven的setting。xml配合的帳號密碼必須一致 18/1/9

  3. org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.mmednet.assessment.project.scheme.dao.SchemeSportFoodBaseDao.getSchemeSportFoodBase

    通常是mapper.xml中 SchemeSportFoodBaseDao的包路徑寫錯了
  4. dubbo服務本地調用不通能夠

    dubbo服務名->提供者->找到本地和服務器dubbo
     加權或者禁用服務器的dubbo服務只啓動本地的dubbo服務測試

18/1/10

  1. @Select(....)註解的做用就是告訴mybatis框架,執行括號內的sql語句

  2. s_id id,s_name name,class_id classid 格式是 字段名+屬性名,例如s_id是數據庫中的字段名,id是類中的屬性名

    這段代碼的做用就是實現數據庫字段名和實體類屬性的一一映射,否則數據庫不知道如何匹配

  3. where s_name= #{aaaa} and class_id = #{bbbb} 表示sql語句要接受2個參數,一個參數名是aaaa,一個參數名是bbbb,若是要正確的傳入參數,那麼就要給參數命名,由於不用xml配置文件,那麼咱們就要用別的方式來給參數命名,這個方式就是@Param註解

  4. 在方法參數的前面寫上@Param("參數名"),表示給參數命名,名稱就是括號中的內容

    public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id); 
     給入參 String name 命名爲aaaa,而後sql語句....where  s_name= #{aaaa} 中就能夠根據aaaa獲得參數值了

18/1/11

  1. 加密算法在windows測試正經常使用linux測試不正常

    問題:Given final block not properly padded  
     緣由:SecureRandom?實現徹底隨操做系統自己的ƒ炔孔刺��©非調用方在調用?getInstance?方法,而後調用?setSeed?方法;
     	該實如今?windows?上每次生成的?key?都相同,可是在?solaris?或部分?linux?系統上則不一樣。關於SecureRandom類的詳細介紹,
     	SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG") ;
     			secureRandom.setSeed(password.getBytes());
         kgen.init(128, secureRandom);
  2. sql截取str中strsub出現的最後位置前邊的字符串

    select left(str,LENGTH(str) - LOCATE(REVERSE(strsub), REVERSE(str)))
  3. sql截取str中strsub出現的最後位置後邊的字符串

    select right('fad_rer_rew',LOCATE(REVERSE('_'), REVERSE('fad_rer_rew'))-length('_'))

18/1/12

  1. idea中tomcat 亂碼

    1.tomcat service.xml 中加utf-8無論用
     2.tomcat catlina中加utf-8無論用
     3.idea tomcat vm 中設置tomcat的utf-8無論用
     4.idea seting encoding 設置utf-8 無論用
     最後絕招
     前提是你以上都試過確定無論用了
     打開idea安裝目錄-bin
    
     用記事本打開idea.exe.vmoptions和idea64.exe.vmoptions文件
     在文件後面添加一行:-Dfile.encoding=UTF-8
      idea 2018 的 vmoptions配置無效只能手動改 vmoptions文件

18/1/15

  1. jms 的消費的生產 註解和mxl方式

  2. 解決使用FastJson反序列化泛型類時,內部嵌套類型沒法正確識別的問題//https://chenzhihao.cc/archives/375

    A a = JSON.parseObject(str,new TypeReference<A>() { });

18/1/18

  1. 上傳文件時候加Content-Type application/x-www-form-urlencoded請求頭,和Content-Type: multipart/form-data;

    springmvc中(@RequestParam中required不能爲false 若是加了會file和上傳的字段數據會重置爲null
     例如:
     錯
      @RequestParam(value = "fileData",required = false
     對
      public ResponseParam upload(@RequestParam(value = "fileData") MultipartFile file,

18/1/22

  1. mybatis 多個字段dao要加@Param mapper要加parameterType="map" 18/1/23

  2. 寫測試類的時候不要寫main函數用@test代替

  3. mapper.xml中能返回int不要返回map儘可能簡單 18/1/24

  4. https://san-yun.iteye.com/blog/1987852

    log4j轉到logback 加log4j-over-slf4j包1.7.21  ,
     遇到的問題:log4j-over-slf4j包必定要在log4j包前邊加載,就是maven配置jar包先寫log4j-over-slf4j包在寫log4j包
     ,否則slf4j不會橋接log4j包
     netstat  -an|findstr 8080 查看端口

18/1/25

  1. IDEA中Maven配置—下載不了jar包

    解決問題:用idea自帶的maven
     File—Settings—Maven 
     .maven home directory:指的是maven路徑,以前我配置的是本身安裝maven的路徑,如今 Bundled(Maven 3)是idea自帶的(選這個不能選本身的)
     User settings file:是settings路徑,最好用本身配置settings文件。本身可能配置私服
  2. local repository:指倉庫路徑。最好本身配置,jar包太多放c盤不合適

    若是說找不到mapper.xml中方法,name去看看是不是沒有掃描到包(上次複製別人項目把掃描包直接寫成userMapper了,至於怎麼都找不到別的mapper文件,坑)
     寫功能前最好先寫構思邏輯,寫好了再寫功能,能避免一些沒必要要的麻煩

18/1/28

  1. maven deploy之後若是仍是構建失敗多是服務器maven依賴本地jar包,那麼刪除服務器本地jar包重新上傳吧

  2. mybatis 若是是計算數量什麼的最好返回值直接就是int。 18/1/29 1. com.alibaba:fastjson:反序列化 若是字段中有isXXX須要 加

    @JSONField(name = "isDeleted")
      @JSONField(name = "isDeleted")
     	private boolean isDeleted;
      A a = new A();
     a.setDeleted(false);
     String msg = JSON.toJSONString(a);

19/2/11 結論

  1. in()適合B表比A表數據小的狀況 (在內存比較)

  2. exists()適合B表比A表數據大的狀況(在a表和b表結果集比較)

    當A表數據與B表數據同樣大時,in與exists效率差很少,可任選一個使用.
    
     select * from A
     where id in(select id from B)
    
     修改一個表
     -- 錯 update a_test1 as test1 
     -- set name (select * from a_test1 as intest1
     --  where intest1.name = test1.name
     --  )
    
     --  對 update a_test1 a
     --  inner join a_test1 as intest1 on a.name = intest1.name
     --  set a.name = 'af'
    
     -- 對 update a_test1 a,a_test1 as intest1
     --  set a.name = intest1.name
     計數
     -- select sum(if(name='blue',1,0)),sum(if(name='red',1,0)) from a_test1
     -- 加 or null
     -- select count(name = 'blue' or null),count(name = 'red' or null) from a_test1
     爲何要加or null?1.由於count(參數) 只要參數不爲null,都會進行計數,只寫year=2006(至關於year==2006)是個true,計數,若是不加or null,那麼year==2007 或者year==2008是個false,也會進行計數。2.若是加了or null 的話 ,year==2006是個ture,true or null 是true 會計數;year==2007是個false,false or null 等於null,則不會計數。能夠參考這個
     文章https://wangyaoxu.github.io/2017/09/21/mysql-count/
  3. 優化分頁查詢

    select * from a_test1 
     inner join
     (select id from a_test1 ORDER BY name limit 2 ,3
    
     ) as lim using(id)

19/2/18 //5.2後棄用

List<Object[]> resutLists = super.getSession().createSQLQuery(sql.toString()).setParameter(1,"").setResultTransformer(Transformers.aliasToBean(ArticleDto.class)).list();

//5.2後使用

List<Object[]> resutList = (List<Object[]>) super.findBySql(sql.toString(),0,0);
List<ArticleDto> list = BeanHelper.transformTuple(resutList, ArticleDto.class,
  new String[] { "id", "cid", "title", "subTitle", "author", "url",
  "priority", "cover", "summary", "content", "pv", "publishDate", "cname"});

//查詢 sessionFactory.getCurrentSession();
	List<Object[]> resutLists =  super.getSession().createNativeQuery(sql.toString(),ArticleDto.class).setParameter(1,"").setParameter(2,"").unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP)
  .list();

//增刪改
int i =  super.getSession().createNativeQuery(sql.toString()).setParameter(1,"").setParameter(2,"").executeUpdate();
//用上邊的兩種,這種能夠不用了
List<Map<String,String>> mapList = Lists.newArrayList();

19/2/19

  1. @Transactional(rollbackFor = Exception.class)

    rollbackFor:一組異常類的實例,遇到時必須進行回滾

    rollbackForClassname:一組異常類的名字,遇到時必須進行回滾

    noRollbackFor:一組異常類的實例,遇到時必須不回滾

    noRollbackForClassname:一組異常類的名字,遇到時必須不回滾

    若是異常被try{}catch{}了,事務就不回滾了,若是想讓事務回滾必須再往外拋try{}catch{throw Exception}。 必須在catch中手動回滾; nginx 413錯誤 client_max_body_size 8M; client_body_buffer_size 128k;

19/2/21

  1. //把a的數據拷給b

    B b = new B();
     BeanUtils.copyProperties( a,b);
    
     spring-mvc @RequestMapping 多個url映射到一個方法
     @RequestMapping攔截多個請求
     @RequestMapping(value={"url","resturl"})

19/2/22

  1. dubbo.protocol.dubbo.payload=11557050(默認爲8M,即8388608) 19/3/21

  2. 服務調用

    @Reference(cluster="failfast",interfaceClass=PadPersonalApi.class,lazy=true,check=false,timeout=5000)
    添加 lazy=true,check=false 註解當PadPersonalApi服務沒有啓動也不會影響當前服務啓動

19/6/12

  1. 今天遇到一個問題 後端返回到jspmodel是個id取值居然是maven的名稱 而後從新把返回的名稱換成ids命名就能夠取到值了,暫時沒找到緣由。windows下沒事,linux下須要不能爲id,神奇

  2. El表達式中參數是空的取值會報錯的,不肯定的注意判斷空。

    有些接口不方便的測試其實能夠用get、post請求對接前端直接測試好比sign,token驗證的問題。Httpclient、 okhttp工具等都很不錯,pom文件引入直接main方法就行。
  3. 建立服務

    建立新服務或者加新功能須要依賴的時候注意配置文件,和配置類都要加上,有的是在配置類裏邊注入到spring bean中的。
  4. Dubbo消費者注意消費提供者的時候若是不加懶加載消費不到會報錯的。

    跟spring 的autowire若是注入對象爲null不設置false同樣。須要設置。

  5. Nginx配置 建立服務的時候請求路徑是服務名稱/加本身定義的路徑,否則配置nginx會很麻煩

    若是是4開頭的通常是前端沒到後端
     5開頭的是服務器響應錯誤
     須要注意
  6. 代碼規範

    業務邏輯最好都抽到service處理,方便controller查看接口,不至於controller太臃腫 數據最好都都判斷非空,數據格式、類型轉換須要注意異常。

2019/12/15

  1. 隊列名稱發送消息,接受消息必定要打印日誌

  2. 初版軟件寫完必定要寫自動化部署腳本,以及經常使用腳本。 業務分明,公共類,和單個應用使用的要作區分

  3. 架構選型

    1. 若是是頻繁訪問直接選長鏈接,若是訪問不頻繁且數據量小直接選用短連接。

    2. 若是是不頻繁訪問,數據量大選用長鏈接。應爲可能須要支持斷點續傳數據。

      一個應用中能夠長短鏈接搭配使用。

      合理的一個應用應該是: 入口-》鑑權-》訪問各個應用-》緩存-》數據庫 其中能夠穿插一些mq做爲數據解耦合。

相關文章
相關標籤/搜索