java學(xué)習(xí)

          java學(xué)習(xí)

           

          2021年9月22日

          docker 筆記

          下載的docker鏡像默認(rèn)存儲(chǔ)路徑是/var/lib/docker .具體的鏡像文件就在containers文件夾中
          docker save -o d:/docker/zen.tar easysoft/zentao:15.5
          docker run -d -p 80:80  \
                  -e ADMINER_USER="admin" -e ADMINER_PASSWD="qqzj126" -e MYSQL_ROOT_PASSWORD=qqzj126  \
                  -e BIND_ADDRESS="false" \
                  -v /opt/data/zbox/:/opt/zbox/ \
                  -v /opt/mysqldata:/var/lib/mysql  \
                  --name zentao-server \
                  easysoft/zentao:15.5
            docker logs -f 

          posted @ 2021-09-22 17:02 楊軍威 閱讀(90) | 評(píng)論 (0)編輯 收藏

          2021年6月1日

          后臺(tái)運(yùn)行jar包并輸出日志

          運(yùn)行命令(注意路徑)

          java -jar /web/share-book.jar > /web/log.txt &
          該命令的意思是:執(zhí)行share-book.jar這個(gè)文件,并且輸出到log.txt文件,&表示后臺(tái)運(yùn)行

          解決更新項(xiàng)目帶來(lái)的頻繁重啟操作,創(chuàng)建2個(gè)腳本

          start.sh

          #! /bin/bash
          #注意:必須有&讓其后臺(tái)執(zhí)行,否則沒(méi)有pid生成   jar包路徑為絕對(duì)路徑
          java -jar /web/share-book.jar > /web/log.txt &
           
          # 將jar包啟動(dòng)對(duì)應(yīng)的pid寫(xiě)入文件中,為停止時(shí)提供pid
          echo $! > /web/pid.txt
          stop.sh

          #! /bin/bash
          PID=$(cat /web/pid.txt)
          kill -9 $PID

          啟動(dòng)項(xiàng)目:./start.sh

          停止項(xiàng)目:./stop.sh

          posted @ 2021-06-01 13:56 楊軍威 閱讀(2928) | 評(píng)論 (0)編輯 收藏

          2021年4月19日

          HADOOP_HOME and hadoop.home.dir are unset

          一.問(wèn)題描述:windows本地調(diào)試Hadoop程序時(shí)報(bào)錯(cuò)
          錯(cuò)誤信息:
          其原因是需要在windows本地搭建Hadoop環(huán)境,下載winutils文件,并將hadoop-2.8.4包內(nèi)的bin文件替換,將下載文件中hadoop.dll放到C:\Windows\System32下
          二.解決過(guò)程如下:
          1.下載hadoop,去官網(wǎng)下載對(duì)應(yīng)的hadoop版本,我在linux集群搭建的是hadoop-2.8.4,因此將hadoop-2.8.4下載到windows本地
          https://www.jianshu.com/p/a65a95108620

          posted @ 2021-04-19 09:45 楊軍威 閱讀(559) | 評(píng)論 (0)編輯 收藏

          2021年1月14日

          從git倉(cāng)庫(kù)中刪除.idea文件夾

          如果不配置.gitignore的文件,帶push代碼的時(shí)候就會(huì)把一寫(xiě)不必要的文件push到遠(yuǎn)程倉(cāng)庫(kù),如.idea文件。如果不小心出現(xiàn)此文件在遠(yuǎn)程倉(cāng)庫(kù)可以通過(guò)一下步驟delete此文件:

          1.配置.gitignore文件(新建/編輯)

          echo '.idea' >> .gitignore

          2.將.gitignore文件上傳到遠(yuǎn)程倉(cāng)庫(kù)

          git pull git add .gitignore git commit -m 'edit .gitignore' git push origin master

          3.刪除git的.idea文件

          git rm --cached -r .idea

          4.同步到遠(yuǎn)程倉(cāng)庫(kù)

          git commit -m 'delete .idea' git push origin master

          完成之后就可以發(fā)現(xiàn)git倉(cāng)庫(kù)中的.idea文件已經(jīng)被刪除,而且之后push代碼也不會(huì)再把.idea文件上傳。

          PS:我在使用PyCharm編寫(xiě)python代碼,一般是通過(guò)new -> .ignore file -> .gitignore file 自動(dòng)生成.gitignore文件。
          下面是我自己比較常用的.gitignore文件簡(jiǎn)短配置:

          .project .settings/ .prefs .pydevproject .idea/ .idea .DS_Store .cache *.pyc *.html *.xlm

          posted @ 2021-01-14 15:15 楊軍威 閱讀(185) | 評(píng)論 (0)編輯 收藏

          2020年12月1日

          GC overhead limit exceeded和java heap space

          1、java heap space  一次申請(qǐng)?zhí)蟮膬?nèi)存空間
          2、GC overhead limit exceeded   創(chuàng)建太多的對(duì)象,gc收集不完

          posted @ 2020-12-01 10:19 楊軍威 閱讀(280) | 評(píng)論 (0)編輯 收藏

          2020年11月19日

          緩存一致性和緩存雪崩

               摘要:   閱讀全文

          posted @ 2020-11-19 14:12 楊軍威 閱讀(83) | 評(píng)論 (0)編輯 收藏

          2020年11月17日

          linux Tomcat 開(kāi)機(jī)啟動(dòng)配置

          1、 vim /etc/rc.d/rc.local
          2、添加內(nèi)容
          export JAVA_HOME=/usr/java/jdk1.8.0_111
          /app/tomcat/bin/startup.sh start
          3、
          chmod 777 /etc/rc.d/rc.local

          posted @ 2020-11-17 10:40 楊軍威 閱讀(131) | 評(píng)論 (0)編輯 收藏

          2020年10月30日

          java synchronized 鎖對(duì)象

          /**
          * synchronized 放在普通方法上,內(nèi)置鎖就是當(dāng)前類(lèi)的實(shí)例
          * @return
          */
          public synchronized int getNext() {
          return value ++;
          }
          /**
          * 修飾靜態(tài)方法,內(nèi)置鎖是當(dāng)前的Class字節(jié)碼對(duì)象
          * Sequence.class
          * @return
          */
          public static synchronized int getPrevious() {
          // return value --;
          return 0;
          }

          posted @ 2020-10-30 16:37 楊軍威 閱讀(89) | 評(píng)論 (0)編輯 收藏

          2020年8月31日

          canal簡(jiǎn)單安裝使用

          1、數(shù)據(jù)庫(kù)配置

          首先使用canal需要修改數(shù)據(jù)庫(kù)配置

          [mysqld] 
          log-bin=mysql-bin # 開(kāi)啟
          binlog binlog-format=ROW # 選擇 ROW 模式
          server_id=1 # 配置 MySQL replaction 需要定義,不要和 canal 的 slaveId 重復(fù)

          創(chuàng)建canal數(shù)據(jù)庫(kù)用戶(hù)

          CREATE USER canal IDENTIFIED BY 'canal';  
          GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON
          *.* TO 'canal'@'%';
          FLUSH PRIVILEGES;

           

          2、安裝canal

          下載:https://github.com/alibaba/canal/releases

          解壓(修改版本號(hào)):tar zxvf canal.deployer-1.1.4.tar.gz -C ./canal

          配置開(kāi)放服務(wù)器端口:11110、11111、11112

          修改canal配置文件(這里設(shè)置了兩個(gè)instance,即兩個(gè)數(shù)據(jù)庫(kù)):

          vi canal/conf/canal.properties 
          canal.destinations
          = example1,example2

           配置instance:

          cp -R canal/conf/example conf/example1
          mv conf/example conf/example2

          第一個(gè)數(shù)據(jù)庫(kù)配置

          vi canal/conf/example1/instance.properties
          canal.instance.master.address
          =32.1.2.140:3306

          第二個(gè)數(shù)據(jù)庫(kù)配置

          vi canal/conf/example2/instance.properties
          canal.instance.master.address
          =32.1.2.140:3307

          #如果需要新增一個(gè)instance,只需要修改canal.properties文件,并新增一個(gè)instance配置即可,無(wú)需重啟canal。

          運(yùn)行:

          sh canal/bin/startup.sh # 查看日志
          cat canal/logs/canal/canal

           

          3、Java使用樣例

          引入pom依賴(lài),需要與安裝的canal版本一致

          復(fù)制代碼
          <dependencies>     <dependency>         <groupId>com.alibaba.otter</groupId>         <artifactId>canal.client</artifactId>         <version>1.1.4</version>     </dependency> </dependencies>
          復(fù)制代碼

          示例代碼(異步打印兩個(gè)數(shù)據(jù)庫(kù)的修改內(nèi)容):

          復(fù)制代碼
          package cn.spicybar.dblog;  import com.alibaba.otter.canal.client.CanalConnector; import com.alibaba.otter.canal.client.CanalConnectors; import com.alibaba.otter.canal.protocol.CanalEntry.Entry; import com.alibaba.otter.canal.protocol.CanalEntry.EntryType; import com.alibaba.otter.canal.protocol.CanalEntry.RowChange; import com.alibaba.otter.canal.protocol.Message;  import java.net.InetSocketAddress; import java.util.List;  public class CanalClient {      public static void main(String[] args) {         new Thread(() -> initConnector("example1")).start();         new Thread(() -> initConnector("example2")).start();     }      private static void initConnector(String destination) {         CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress("32.1.0.237", 11111), destination, "", "");         try {             connector.connect();             connector.subscribe(".*\\..*");             connector.rollback();             while (true) {                 Message message = connector.getWithoutAck(1000);                 if (message.getId() != -1 && message.getEntries().size() > 0) {                     printEntry(message.getEntries());                 }                 connector.ack(message.getId());             }         } finally {             connector.disconnect();         }     }      private static void printEntry(List<Entry> entries) {         for (Entry entry : entries) {             if (entry.getEntryType() == EntryType.TRANSACTIONBEGIN || entry.getEntryType() == EntryType.TRANSACTIONEND) {                 continue;             }             try {                 RowChange rowChange = RowChange.parseFrom(entry.getStoreValue());                 System.out.println(rowChange.getSql());             } catch (Exception e) {                 throw new RuntimeException("ERROR ## parser error, data:" + entry.toString(), e);             }         }     }

          posted @ 2020-08-31 10:55 楊軍威 閱讀(671) | 評(píng)論 (0)編輯 收藏

          2020年8月7日

          java 二分法查詢(xún)數(shù)據(jù)

          public int binarySearch(long value) {
          int middle = 0;
          int low = 0;
          int pow = arr.length;

          while(true) {
          middle = (pow + low) / 2;
          if(arr[middle] == value) {
          return middle;
          } else if(low > pow) {
          return -1;
          } else {
          if(arr[middle] > value) {
          pow = middle - 1;
          } else {
          low = middle + 1;
          }
          }
          }
          }

          posted @ 2020-08-07 11:00 楊軍威 閱讀(138) | 評(píng)論 (0)編輯 收藏

          僅列出標(biāo)題  下一頁(yè)

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 体育| 巴塘县| 枣庄市| 安龙县| 喀什市| 天祝| 庆云县| 丰原市| 石渠县| 三河市| 凌云县| 库尔勒市| 屏南县| 增城市| 沈丘县| 辽宁省| 南郑县| 康马县| 客服| 文化| 台南市| 高要市| 古蔺县| 阿勒泰市| 武安市| 石河子市| 勃利县| 江西省| 柏乡县| 永川市| 盈江县| 泰和县| 广南县| 阳新县| 上栗县| 郴州市| 沂水县| 峨眉山市| 五寨县| 扎囊县| 屯留县|