Java基礎總結4

一、冒泡排序法html

package jiangyi;

public class BubbleSort {
    public static int[] sort(int[] array) {
        //這裏for循環表示總共須要比較多少輪
        for (int i = 1; i < array.length; i++) {
            //設定一個標記,若爲true,則表示這次循環沒有進行交換,也就是待排序列已經有序,排序已經完成。
            boolean flag = true;
            //這裏for循環表示每輪比較參與的元素下標
            //對當前無序區間array[0......length-i]進行排序
            //j的範圍很關鍵,這個範圍是在逐步縮小的,由於每輪比較都會將最大的放在右邊
            for (int j = 0; j < array.length - i; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                    flag = false;
                }
            }
            if (flag) {
                break;
            }
            //第 i輪排序的結果爲
            System.out.print("第" + i + "輪排序後的結果爲:");
            display(array);

        }
        return array;

    }

    //遍歷顯示數組
    public static void display(int[] array) {
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int[] array = {9, 2, 8, 4, 5, 7, 6, 1, 3};
        //未排序數組順序爲
        System.out.println("未排序數組順序爲:");
        display(array);
        System.out.println("-----------------------");
        array = sort(array);
        System.out.println("-----------------------");
        System.out.println("通過冒泡排序後的數組順序爲:");
        display(array);
    }

}

二、Tomcat原理詳解及請求過程  http://www.javashuo.com/article/p-eddbyzrq-du.htmljava

  Tomcat的context.xml文件mysql

  <Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>此組件是爲了定位項目中WEB-INF文件下的/web.xml配置文件,如需更更名稱則二者都需更改。
    <ResourceLink global="jdbc/mysql" name="jdbc/mysql" type="javax.sql.DataSource"/>配置全局JNDI數據源,應用到全部Tomcat下部署的應用。
  </Context>web

  Tomcat的server.xml文件的一些重要配置算法

  <Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" maxActive="20" maxIdel="10" maxWait="1000" name="jdbc/mysql" username="用戶名" password="用戶密碼" type="javax.sql.DataSource" url="jdbc:mysql://10.37.92.162:3306/xxx(數據庫名)?autoreconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" />配置數據庫鏈接spring

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>配置端口號等信息sql

<Context docBase="mypro(項目名)" path="/" reloadable="true" source="org.eclipse.jst.jee.server:mypro"/>配置訪問路徑數據庫

三、@Transactionalapache

基於註解的聲明式事務管理配置數組

<tx:annotation-driven/>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource"/>
</bean>

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.DEFAULT,readOnly=false,rollbackFor=RuntimeException.class) 

propagation=Propagation.REQUIRED :有事務就處於當前事務中,沒事務就建立一個事務
isolation=Isolation.DEFAULT:事務數據庫的默認隔離級別
readOnly=false:可寫,針對增刪改操做

rollbackFor=RuntimeException.class:遇運行時異常會回滾。

在類上聲明的事務等於爲其全部方法都聲明瞭事務,在方法上聲明的事務會覆蓋類聲明的事務。

四、HashMap  https://blog.csdn.net/it_dx/article/details/73477647 

        http://www.javashuo.com/article/p-abozewnu-du.html

   ConcurrentHashMap  https://yemengying.com/2015/11/06/【譯】如何在java中使用ConcurrentHashMap/

五、四種多線程的實現方式  http://www.javashuo.com/article/p-uawdyimt-ce.html

六、group by having 語句  https://blog.csdn.net/bingogirl/article/details/52559302

七、該死的異常問題  http://www.javashuo.com/article/p-qkaygzvr-gq.html

            http://www.javashuo.com/article/p-fvkwccbc-o.html

八、算法與數據結構  http://blog.jobbole.com/110835/

九、將byte數組按行讀取:

  BufferedReader in = new BufferedReader(new StringReader(new String(bytes, "utf-8")));

  String readLine;

  while ((readLine = in.readLine()) != null) {

  // 進行數據處理  

  }

十、execution表達式

例如:定義切入點表達式@Pointcut("execution(public * com.sun.service.impl..*.*(..))")
execution()是最經常使用的切入點函數,其語法格式以下所示:
整個表達式能夠分爲5個部分:
1.execution():表達式主體
2.public表示方法修飾符,可加可不加;第一個*號表示返回得類型,*號後表示全部的類型。
3.包名:表示須要攔截的包名,後面兩個句點..表示當前包和當前包下的全部子包,com.sun.service.impl包,子孫包下全部類的方法。
4.第二個*號:表示類名,*表示全部類。
5.*(..):最後這個*號表示方法名,*號表示全部的方法,後面括號裏面表示方法的參數,兩個句點表示任何參數。

十一、選擇排序法

package jiangyi;

public class ChooseSort {
    public static void main(String[] args) {
        int[] array = {8, 3, 5, 1, 0, 7, 4, 9, 2, 6, 0};
        chooseSort(array);
        for (int i : array) {
            System.out.print(i + " ");
        }
    }
    private static void chooseSort(int[] array) {
        // 遍歷數組,從第一位開始處理
        for (int i = 0; i < array.length - 1; i++) {
            // 定義一個最小值索引
            int minIndex = i;
            // 遍歷數組,將數組中全部位置的元素依次與array[minIndex]比較,
            // 只要比array[minIndex]小就將索引賦值於minIndex,最終索引minIndex
            // 處元素值最小
            for (int j = i; j <= array.length - 1; j++) {
                if (array[minIndex] > array[j]) {
                    minIndex = j;
                }
            }
            // 排除相同索引處的比較,將索引i處元素與索引minIndex處元素相互替換
            if (minIndex != i) {
                int temp = array[minIndex];
                array[minIndex] = array[i];
                array[i] = temp;
            }

        }

    }
}

十二、ConcurrentHashMap的get操做

  get操做的高效之處在於整個get過程不須要加鎖,除非讀到的值是空的纔會加鎖重讀,咱們知道HashTable容器的get方法是須要加鎖的,那麼ConcurrentHashMap的get操做是如何作到不加鎖的呢?緣由是它的get方法裏將要使用的共享變量都定義成volatile,如用於統計當前Segement大小的count字段和用於存儲值的HashEntry的value。定義成volatile的變量,可以在線程之間保持可見性,可以被多線程同時讀,而且保證不會讀到過時的值,可是隻能被單線程寫(有一種狀況能夠被多線程寫,就是寫入的值不依賴於原值),在get操做裏只須要讀不須要寫共享變量count和value,因此能夠不用加鎖。之因此不會讀到過時的值,是根據java內存模型的happen before原則,對volatile字段的寫入操做先於讀操做,即便兩個線程同時修改和獲取volatile變量,get操做也能拿到最新的值,這是用volatile替換鎖的經典應用場景。  

1三、Lock和synchronized的選擇

  1)Lock是一個接口,而synchronized是Java中的關鍵字,synchronized是內置的語言實現;

  2)synchronized在發生異常時,會自動釋放線程佔有的鎖,所以不會致使死鎖現象發生;而Lock在發生異常時,若是沒有主動經過unLock()去釋放鎖,則極可能形成死鎖現象,所以使用Lock時須要在finally塊中釋放鎖;

  3)Lock可讓等待鎖的線程響應中斷,而synchronized卻不行,使用synchronized時,等待的線程會一直等待下去,不可以響應中斷;

  4)經過Lock能夠知道有沒有成功獲取鎖,而synchronized卻沒法辦到。

  5)Lock能夠提升多個線程進行讀操做的效率。

1三、mybatis防sql注入

  https://blog.csdn.net/yizhenn/article/details/52384601

1四、mysql索引

  http://www.javashuo.com/article/p-nqxwlyeq-k.html

1五、共享鎖與排他鎖

  http://www.hollischuang.com/archives/923

1六、悲觀鎖與樂觀鎖

  http://www.cnblogs.com/wmyskxz/p/9067197.html

1七、MySQL中exists與in的區別

  http://www.javashuo.com/article/p-rjrlgptk-bo.html

1八、springmvc經常使用註解

  http://www.javashuo.com/article/p-vukqgbcb-cb.html

1九、mybatis批量修改

  https://www.jb51.net/article/124849.htm

20、mybatis中trim標籤的使用

  https://www.cnblogs.com/qiankun-site/p/5758924.html

相關文章
相關標籤/搜索