<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    java學習

    java學習

     

    分布式鎖應該具備的條件

    1、在分布上系統環境下,一個方法在同一時間只能被一個機器上的一個線程訪問
    2、高可用的獲取鎖和釋放鎖
    3、高效的獲取鎖和釋放鎖
    4、具備可重入特性(重新進入,由多個任務并發使用,不比擔心數據錯誤)
    5、具備鎖的失效機制,防止死鎖
    6、具備非阻塞鎖的特性,沒有獲取到鎖,直接返回獲取鎖失敗

    posted @ 2020-03-24 12:47 楊軍威 閱讀(554) | 評論 (0)編輯 收藏

    docker 安裝 registry

    1。新建/usr/local/docker/registry  文件夾
    2、在registry中新建docker-compose.yml文件,編輯此文件
    version: '3.1'
    services:
     registry:
      image: registry:2.7.1
      restart: always
      container_name: registry
      ports:
       - 5000:5000
      volumes:
       - /usr/local/docker/registry/data:/var/lib/registry
     frontend:
        image: konradkleine/docker-registry-frontend:v2
        ports:
          - 8080:80
        volumes:
          - ./certs/frontend.crt:/etc/apache2/server.crt:ro
          - ./certs/frontend.key:/etc/apache2/server.key:ro
        environment:
          - ENV_DOCKER_REGISTRY_HOST=192.168.1.8
          - ENV_DOCKER_REGISTRY_PORT=5000
    3.運行 docker-compose up
    4.上傳鏡像
    docker tag tomcat 192.168.1.8:5000/tomcat:8.1
     docker push 192.168.1.8:5000/tomcat:8.1

    posted @ 2020-03-19 18:17 楊軍威 閱讀(137) | 評論 (0)編輯 收藏

    docker 安裝MySQL

    version: '3.1' services: mysql: restart: always image: mysql:5.7.22 container_name: mysql ports: - 3306:3306 environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: 123456 command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 --max_allowed_packet=128M --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO" volumes: - mysql-data:/var/lib/mysql volumes: mysql-data:

    version: '3.1' services: db: image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: 123456 command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 ports: - 3306:3306 volumes: - ./data:/var/lib/mysql adminer: image: adminer restart: always ports: - 8080:8080

    posted @ 2020-03-19 13:29 楊軍威 閱讀(123) | 評論 (0)編輯 收藏

    docker離線安裝

    批量安裝依賴包:rpm -Uvh *.rpm --nodeps --force

    安裝 container-selinux-2.9-4.el7.noarch.rpm : rpm -Uvh container-selinux-2.9-4.el7.noarch.rpm

    pasting

    安裝 dockerrpm -Uvh docker-ce-18.03.1.ce-1.el7.centos.x86_64.rpm

    pasting
    • 啟動docker:systemctl start docker
    • 查看docker啟動容器列表: docker ps

    posted @ 2020-03-17 13:50 楊軍威 閱讀(234) | 評論 (0)編輯 收藏

    oracle 表空間修改

    select d.file_name,d.tablespace_name,d.autoextensible from dba_temp_files d;
    select d.file_name,d.tablespace_name,d.autoextensible from DBA_DATA_FILES d;
    drop tablespace tablespace_name including contents and datafiles;
    ALTER TABLESPACE users ADD DATAFILE
    '/app/oradata/orclnew/orclnew/users02.dbf' 
    size 7167M autoextend on ;


    SELECT sid, serial#, username, osuser FROM v$session where sid in (select session_id from v$locked_object);
    刪除連接的session
    ALTER SYSTEM KILL SESSION '9,4335';
    導出oracle數據
    exp xxx/xxx@orclnew file=/app/backup.dmp owner=xxx rows=n 
    當導出報錯信息是 EXP-00091: Exporting questionable statistics時,執行下面的語句
    select userenv('language') from dual;
    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

    posted @ 2019-11-28 17:13 楊軍威 閱讀(94) | 評論 (0)編輯 收藏

    反編譯jar重新打包jar

    1、使用反編譯工具找到需要修改的class文件,保存成Java文件。
    2、新建Java項目,導入所有需要的jar,在src中放入需要修改的Java文件。
    3、修改完畢后,在bin中找到新生成的class文件,解壓原來的jar,替換class文件。
    4.有三種方式重新打包,a 把解壓替換過的jar文件導入到eclipse中,導出jar
    b 使用zip壓縮格式,修改后綴名jar
    c  進入文件目錄,使用執行jar -cvf aa.jar

    posted @ 2019-06-06 12:32 楊軍威 閱讀(1620) | 評論 (0)編輯 收藏

    java future 線程模式

    public interface Data {
    String getResult();
    }
    public class FutureData implements Data{
    protected Data data=null;
    protected boolean f=false;
    public synchronized void setData(Data data) {
    if(f) {
    return;
    }
    f=true;
    this.data=data;
    notifyAll();
    }
    @Override
    public synchronized String getResult() {
    while (!f) {
    try {
    wait();
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    return data.getResult();
    }
    }
    public class RealData implements Data{
    protected  String s;
    public RealData(String name) {
    StringBuffer sb=new StringBuffer("");
    for (int i = 0; i < 10; i++) {
    sb.append(name);
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    }
    s=sb.toString();
    }
    @Override
    public String getResult() {
    // TODO Auto-generated method stub
    return s;
    }
    }
    public class Client {
    public Data request(final String ss) {
    final FutureData f=new FutureData();
    new Thread() {
    public void run() {
    RealData r=new RealData(ss);//模擬復雜的數據封裝和處理
    f.setData(r);
    };
    }.start();
    return f;
    public static void main(String[] args) {
    Client client=new Client();
    Data d = client.request("123");
    System.out.println(d.getResult());
    }
    }
    public class FutureTest {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
    ExecutorService e=Executors.newFixedThreadPool(11);
    FutureTask<String> f=new FutureTask<>(new Callable<String>() {
    @Override
    public String call() throws Exception {
    Thread.sleep(5000);
    return "aa";
    }
    }); 
    e.submit(f);
    System.out.println(f.get());
    }
    }

    posted @ 2019-02-18 10:08 楊軍威 閱讀(123) | 評論 (0)編輯 收藏

    定期清理tomcat日志


    vi clean.sh


    logs_path="/appqqq/tomcat/logs"

    find $logs_path -mtime +3 -name "localhost.*.log" -exec rm -rf {} \;
    find $logs_path -mtime +3 -name "localhost_access_log.*.txt" -exec rm -rf {} \;
    find $logs_path -mtime +3 -name "catalina.*.log" -exec rm -rf {} \;
    find $logs_path -mtime +3 -name "manager.*.log" -exec rm -rf {} \;
    find $logs_path -mtime +3 -name "host-manager.*.log" -exec rm -rf {} \;
    find $logs_path -mtime +3 -name "fileservice.log.*" -exec rm -rf {} \;
    >$logs_path/catalina.out;




    chmod 777 clean.sh

    crontab -e

    0 2 * * * sh /appqqq/tomcat/logs/clean.sh

    posted @ 2018-11-29 18:09 楊軍威 閱讀(384) | 評論 (0)編輯 收藏

    elasticsearch 商品搜索信息的crud簡單操作

    課程大綱
    1、document數據格式
    2、電商網站商品管理案例:背景介紹
    3、簡單的集群管理
    4、商品的CRUD操作(document CRUD操作)
    ----------------------------------------------------------------------------------------------------------------------------
    1、document數據格式
    面向文檔的搜索分析引擎
    (1)應用系統的數據結構都是面向對象的,復雜的
    (2)對象數據存儲到數據庫中,只能拆解開來,變為扁平的多張表,每次查詢的時候還得還原回對象格式,相當麻煩
    (3)ES是面向文檔的,文檔中存儲的數據結構,與面向對象的數據結構是一樣的,基于這種文檔數據結構,es可以提供復雜的索引,全文檢索,分析聚合等功能
    (4)es的document用json數據格式來表達
    2、電商網站商品管理案例背景介紹
    有一個電商網站,需要為其基于ES構建一個后臺系統,提供以下功能:
    (1)對商品信息進行CRUD(增刪改查)操作
    (2)執行簡單的結構化查詢
    (3)可以執行簡單的全文檢索,以及復雜的phrase(短語)檢索
    (4)對于全文檢索的結果,可以進行高亮顯示
    (5)對數據進行簡單的聚合分析
    ----------------------------------------------------------------------------------------------------------------------------
    3、簡單的集群管理
    (1)快速檢查集群的健康狀況
    es提供了一套api,叫做cat api,可以查看es中各種各樣的數據
    GET /_cat/health?v
    epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
    1488006741 15:12:21  elasticsearch yellow          1         1      1   1    0    0        1             0                  -                 50.0%
    epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
    1488007113 15:18:33  elasticsearch green           2         2      2   1    0    0        0             0                  -                100.0%
    epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
    1488007216 15:20:16  elasticsearch yellow          1         1      1   1    0    0        1             0                  -                 50.0%
    如何快速了解集群的健康狀況?green、yellow、red?
    green:每個索引的primary shard和replica shard都是active狀態的
    yellow:每個索引的primary shard都是active狀態的,但是部分replica shard不是active狀態,處于不可用的狀態
    red:不是所有索引的primary shard都是active狀態的,部分索引有數據丟失了
    為什么現在會處于一個yellow狀態?
    我們現在就一個筆記本電腦,就啟動了一個es進程,相當于就只有一個node。現在es中有一個index,就是kibana自己內置建立的index。由于默認的配置是給每個index分配5個primary shard和5個replica shard,而且primary shard和replica shard不能在同一臺機器上(為了容錯)。現在kibana自己建立的index是1個primary shard和1個replica shard。當前就一個node,所以只有1個primary shard被分配了和啟動了,但是一個replica shard沒有第二臺機器去啟動。
    做一個小實驗:此時只要啟動第二個es進程,就會在es集群中有2個node,然后那1個replica shard就會自動分配過去,然后cluster status就會變成green狀態。
    (2)快速查看集群中有哪些索引
    GET /_cat/indices?v
    health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   .kibana rUm9n9wMRQCCrRDEhqneBg   1   1          1            0      3.1kb          3.1kb
    (3)簡單的索引操作
    創建索引:PUT /test_index?pretty
    health status index      uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   test_index XmS9DTAtSkSZSwWhhGEKkQ   5   1          0            0       650b           650b
    yellow open   .kibana    rUm9n9wMRQCCrRDEhqneBg   1   1          1            0      3.1kb          3.1kb
    刪除索引:DELETE /test_index?pretty
    health status index   uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   .kibana rUm9n9wMRQCCrRDEhqneBg   1   1          1            0      3.1kb          3.1kb
    ----------------------------------------------------------------------------------------------------------------------------
    4、商品的CRUD操作
    (1)新增商品:新增文檔,建立索引
    PUT /index/type/id
    {
      "json數據"
    }
    PUT /ecommerce/product/1
    {
        "name" : "gaolujie yagao",
        "desc" :  "gaoxiao meibai",
        "price" :  30,
        "producer" :      "gaolujie producer",
        "tags": [ "meibai", "fangzhu" ]
    }
    {
      "_index": "ecommerce",
      "_type": "product",
      "_id": "1",
      "_version": 1,
      "result": "created",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "created": true
    }
    PUT /ecommerce/product/2
    {
        "name" : "jiajieshi yagao",
        "desc" :  "youxiao fangzhu",
        "price" :  25,
        "producer" :      "jiajieshi producer",
        "tags": [ "fangzhu" ]
    }
    PUT /ecommerce/product/3
    {
        "name" : "zhonghua yagao",
        "desc" :  "caoben zhiwu",
        "price" :  40,
        "producer" :      "zhonghua producer",
        "tags": [ "qingxin" ]
    }
    es會自動建立index和type,不需要提前創建,而且es默認會對document每個field都建立倒排索引,讓其可以被搜索
    (2)查詢商品:檢索文檔
    GET /index/type/id
    GET /ecommerce/product/1
    {
      "_index": "ecommerce",
      "_type": "product",
      "_id": "1",
      "_version": 1,
      "found": true,
      "_source": {
        "name": "gaolujie yagao",
        "desc": "gaoxiao meibai",
        "price": 30,
        "producer": "gaolujie producer",
        "tags": [
          "meibai",
          "fangzhu"
        ]
      }
    }
    (3)修改商品:替換文檔
    PUT /ecommerce/product/1
    {
        "name" : "jiaqiangban gaolujie yagao",
        "desc" :  "gaoxiao meibai",
        "price" :  30,
        "producer" :      "gaolujie producer",
        "tags": [ "meibai", "fangzhu" ]
    }
    {
      "_index": "ecommerce",
      "_type": "product",
      "_id": "1",
      "_version": 1,
      "result": "created",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "created": true
    }
    {
      "_index": "ecommerce",
      "_type": "product",
      "_id": "1",
      "_version": 2,
      "result": "updated",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      },
      "created": false
    }
    PUT /ecommerce/product/1
    {
        "name" : "jiaqiangban gaolujie yagao"
    }
    替換方式有一個不好,即使必須帶上所有的field,才能去進行信息的修改
    (4)修改商品:更新文檔
    POST /ecommerce/product/1/_update
    {
      "doc": {
        "name": "jiaqiangban gaolujie yagao"
      }
    }
    {
      "_index": "ecommerce",
      "_type": "product",
      "_id": "1",
      "_version": 8,
      "result": "updated",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      }
    }
    我的風格,其實有選擇的情況下,不太喜歡念ppt,或者照著文檔做,或者直接粘貼寫好的代碼,盡量是純手敲代碼
    (5)刪除商品:刪除文檔
    DELETE /ecommerce/product/1
    {
      "found": true,
      "_index": "ecommerce",
      "_type": "product",
      "_id": "1",
      "_version": 9,
      "result": "deleted",
      "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
      }
    }
    {
      "_index": "ecommerce",
      "_type": "product",
      "_id": "1",
      "found": false
    }

    posted @ 2018-11-10 18:31 楊軍威 閱讀(144) | 評論 (0)編輯 收藏

    每個班的前10名的MySQL 查詢方法

    1. select a.class,a.score
    2. from student a
    3. where (select count(*) from student where class=a.class and a.score<score)<3
    4. order by a.class,a.score desc;

    posted @ 2018-08-09 14:32 楊軍威 閱讀(526) | 評論 (0)編輯 收藏

    僅列出標題
    共43頁: 上一頁 1 2 3 4 5 6 7 8 9 下一頁 Last 

    導航

    統計

    常用鏈接

    留言簿

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久久亚洲裙底偷窥综合| 亚洲AV日韩AV天堂一区二区三区| 亚洲人成人77777在线播放| 国产成人一区二区三区视频免费| 国产亚洲精品一品区99热| 国产JIZZ中国JIZZ免费看| 精品国产亚洲男女在线线电影 | 免费的一级片网站| 亚洲成a人片在线观看天堂无码| 成熟女人特级毛片www免费| 亚洲色偷偷偷综合网| 国产a级特黄的片子视频免费| 国产亚洲Av综合人人澡精品| 亚洲乱码中文字幕手机在线| 久久er国产精品免费观看8| 国产亚洲一区二区三区在线观看| 七色永久性tv网站免费看| 亚洲麻豆精品果冻传媒| 91频在线观看免费大全| 亚洲熟伦熟女专区hd高清| 国产一级淫片免费播放电影| 九九视频高清视频免费观看| 国产精品亚洲成在人线| 1000部拍拍拍18勿入免费凤凰福利 | 无码一区二区三区AV免费| 日韩国产欧美亚洲v片| 亚洲精品无码99在线观看| 久久精品免费电影| 日韩亚洲产在线观看| 亚洲美女在线国产| 十八禁无码免费网站| 亚洲国产精品自在自线观看 | 亚洲国产精品久久久久| 97国产免费全部免费观看| 免费人成大片在线观看播放| 久久亚洲国产欧洲精品一| 99视频在线精品免费观看6| 一区在线免费观看| 亚洲一区二区三区久久久久| 亚洲男人天堂2020| 无码人妻精品中文字幕免费东京热|