首页 文章 精选 留言 我的

精选列表

搜索[c 14],共10015篇文章
优秀的个人博客,低调大师

Java入门系列-14-深入类和对象

这篇文章用大量的代码帮你搞懂:值传递和引用传递、构造方法、方法重载、static关键字的使用 方法参数传递-值传递和引用传递 1.值传递 敲一敲: /** * 使用方法交换两个变量的值 * @author Jack * */ public class Swap { public static void main(String[] args) { int a=10; int b=8; Swap swap=new Swap(); swap.swap(a, b); System.out.println("调用方法后:a="+a+",b="+b); } public void swap(int a,int b) { int temp=a; a=b; b=temp; System.out.println("交换后:a="+a+",b="+b); } } 在上面这段代码中我们发现在方法内部对这两个参数进行交换成功,但是在调用方法后外部变量并没有任何变化。参数的类型为值类型,使用值类型作为参数称为值传递。 值传递方法内部修改外部不保留,参数内的变量是实参的副本。 2.引用传递 敲一敲: import java.util.Arrays; public class Swap2 { public static void main(String[] args) { int[] ages= {1,2,3}; Swap2 swap=new Swap2(); System.out.println("调用change前:"+Arrays.toString(ages)); swap.change(ages); System.out.println("调用change后:"+Arrays.toString(ages)); } public void change(int[] ages) { ages[0]=100; } } 在方法内部对参数变量进行修改后,方法的外部打印后也进行了修改,数组、类都是引用类型,使用引用类型作为参数传参被称为引用传递。 引用传递方法内部修改外部保留,参数内的变量是对实参的引用。 构造方法 在创建对象的时候,我们使用过这样的代码 类名 对象名=new 类名(); ,其实这时就是在调用此类的构造方法 public 类名(){}。 构造方法又称构造函数,是类中一种特殊的方法。构造方法名与类名相同,不返回任何值,主要完成对象的初始工作。 语法: 访问修饰符 构造方法(可以指定参数){ //初始化代码 } 敲一敲:无参构造方法 public class Student { String name; int age; public Student() { name="张三"; age=18; } public static void main(String[] args) { Student stu=new Student(); System.out.println(stu.name); System.out.println(stu.age); } } 这样就能在 new 时给对象的属性初始化值,但是在每一次 new 的时候都是相同的值。能不能在 new 的同时指定值呢?那就是使用有参的构造方法。 敲一敲:有参构造方法 public class Student { String name; int age; public Student(String name,int age) { this.name=name; this.age=age; } public static void main(String[] args) { Student stu=new Student("张三",12); System.out.println(stu.name); System.out.println(stu.age); } } this 代表当前对象的引用,在有参构造方法中使用时区分属性和参数 上面的这段代码,能不能这样创建对象 Student stu=new Student(); 答案是不可以的 不显式编写构造方法,系统将默认提供无参构造方法 一旦提供编写构造方法,系统便不再提供无参构造方法 所以这时我们可以同时编写有参构造方法和无参构造方法,使我们创建对象的时候更加的灵活。 敲一敲:同时提供有参和无参构造方法 public class Student { String name; int age; //无参构造方法 public Student() {} //有参构造方法 public Student(String name,int age) { this.name=name; this.age=age; } public static void main(String[] args) { //使用有参构造方法 Student stu1=new Student("张三",12); System.out.println(stu1.name); System.out.println(stu1.age); //使用无参构造方法 Student stu2=new Student(); stu2.name="李四"; } } 方法重载 在上一部分中,我们使用了有参和无参的方法,为什么在一个类中可以定义多个类名相同的方法呢?因为实现了方法重载。只不过构造方法重载是一种特殊的重载。 重载的条件(两同两不同) 在同一个类中,方法名相同,参数类型不同,参数个数不同 敲一敲:实现普通方法的重载 public class Teacher { public void teach(String project) { System.out.println("教授科目:"+project); } public void teach(String project1,String project2) { System.out.println("教授科目:"+project1+" 和 "+project2); } public static void main(String[] args) { Teacher t=new Teacher(); t.teach("语文"); t.teach("语文","数学"); } } 在生活中有很多活动就属于重载,比如 表演 ,给表演者剧本就是在表演戏剧,给表演者乐器,就是表演演奏,给表演者话筒,就是表演相声。 在代码中使用重载也有很多好处,比如 System.out.println(); 这个方法也有很多重载形式,可以传入 int string object 作为参数,减少了书写和记忆的成本。你肯定不希望打印每种数据类型时都单独定义一个方法,像后面这样 printIntln(int out) printDoubleln(double out) printLongln(long out) …… this 关键字的用法 在使用构造函数时使用了 this 关键字用于区分属性和参数,那只是第一种用法,除此之外还可以调用方法、调用构造方法。 调用属性:this.health=100; 调用方法:this.print(); 调用构造方法:this(); this("张三",18); 必须用在构造方法中的第一行 static 关键字的用法 如何通过类名直接访问类中的成员,像之前用过的 Arrays.toString(),查看源码部分代码如下。 public static String toString(int[] a) { if (a == null) return "null"; int iMax = a.length - 1; if (iMax == -1) return "[]"; StringBuilder b = new StringBuilder(); b.append('['); for (int i = 0; ; i++) { b.append(a[i]); if (i == iMax) return b.append(']').toString(); b.append(", "); } } 当前这个方法使用了 static 关键字进行了修饰 还可以修饰成员变量: public class Teacher { static final String SEX_MALE="男"; static final String SEX_FEMALE="女"; String sex; public static void main(String[] args) { Teacher teacher=new Teacher(); teacher.sex=Teacher.SEX_FEMALE; System.out.println(teacher.sex); } } final 修饰后的变量都将变成常量 常量的值不能修改,只能使用 可以修饰代码块: public class Teacher { static final String SEX_MALE="男"; static final String SEX_FEMALE="女"; String sex; //代码块 static { System.out.println("静态代码块"); } public static void main(String[] args) { Teacher teacher=new Teacher(); teacher.sex=Teacher.SEX_FEMALE; System.out.println(teacher.sex); } } static 关键字使用注意事项 1.static 修饰了属性和代码块后,会先初始化静态属性,再执行静态代码块 public class TakeCare1 { static String name="aa"; static { System.out.println(name); System.out.println("静态代码块执行"); } public TakeCare1() { System.out.println("构造函数执行"); } public static void main(String[] args) { TakeCare1 t=new TakeCare1(); } } 2.static 关键字不能修饰局部变量 public class TakeCare2 { public static void main(String[] args) { static int a=10; } } 3.同一个类中的静态方法可以互相通过方法名直接调用 public class TakeCare2 { public static void test1() { System.out.println("method test1"); test2(); TakeCare2.test2(); } public static void test2() { System.out.println("method test2"); } public static void main(String[] args) { test1(); } } 4.不同类中的静态成员调用需要通过 类名.成员 调用 public class TakeCare4 { public static void main(String[] args) { Test.test(); System.out.println(Test.name); //test();//去掉前面注释试试 } } class Test{ static String name="Test"; public static void test() { System.out.println("method test"); } } 5.同一个类中非静态方法可以直接通过 属性名或方法名 调用 public class TakeCare5 { static String name="static property"; public static void st() { System.out.println("static method"); } public void test() { System.out.println("instance method"); System.out.println(name); st(); } } 6.静态方法不能直接使用实例成员,需要通过对象调用 public class TakeCare6 { public static void st() { System.out.println("static method"); TakeCare6 tc=new TakeCare6(); tc.test(); //test();//去掉注释后报错 Cannot make a static reference to the non-static method test() from the type TakeCare6 } public void test() { System.out.println("instance method"); } } 总结:static 修饰后的成员就像万能的 O 型血,在任何地方都能 类名.成员 调用(private 修饰除外),实例方法除了本类中的方法,只能 对象.成员 调用 搜索关注公众号「享智同行」,第一时间获取技术干货

优秀的个人博客,低调大师

Django 搭建CMDB系统完整[14](运维记录)

templates/search_yunweijilu.html {% extends 'base.html' %} {% block title %} <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.js"></script> <script type="text/javascript" src="/static/scripts/fancybox/jquery.fancybox-1.3.4.pack.js"></script> <link rel="stylesheet" type="text/css" href="/static/style/authority/jquery.fancybox-1.3.4.css" media="screen"></link> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> <script src="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.js"></script> <link href="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.css" rel="stylesheet" /> <script src="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.js"></script> <script type="text/javascript" src="/static/scripts/datetime/jQuery-Timepicker/dist/i18n/jquery-ui-timepicker-zh-CN.js"></script> <link href="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.css" rel="stylesheet" /> <script type="text/javascript"> (function($) { $(function() { $.datepicker.regional['zh-CN'] = { changeMonth: true, changeYear: true, clearText: '清除', clearStatus: '清除已选日期', closeText: '关闭', closeStatus: '不改变当前选择', prevText: '<上月', prevStatus: '显示上月', prevBigText: '<<', prevBigStatus: '显示上一年', nextText: '下月>', nextStatus: '显示下月', nextBigText: '>>', nextBigStatus: '显示下一年', currentText: '今天', currentStatus: '显示本月', monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], monthStatus: '选择月份', yearStatus: '选择年份', weekHeader: '周', weekStatus: '年内周次', dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'], dayStatus: '设置 DD 为一周起始', dateStatus: '选择 m月 d日, DD', dateFormat: 'yy-mm-dd', firstDay: 1, initStatus: '请选择日期', isRTL: false }; }); $(function() { $.datepicker.setDefaults($.datepicker.regional['zh-CN']); $("#kssj").datetimepicker(); $("#jssj").datetimepicker(); }); }(jQuery)); </script> <div id="container"> <div class="ui_content"> <div class="ui_text_indent"> <div id="box_border"> <div id="box_top">搜索</div> 问题描述<input type="text" id="wtms" name="wtms" value="{{ wtms }}" class="ui_input_txt03" /> 问题来源<input type="text" id="wtly" name="wtly" value="{{ wtly }}" class="ui_input_txt03" style="width:50px" /> 处理人<input type="text" id="clr" name="clr" value="{{ clr }}" class="ui_input_txt03" style="width:50px" /> 开始时间<input type="text" id="kssj" name="kssj" value="{{ kssj|date:"Y-m-d H:i" }}" class="ui_input_txt03" style="width:70px" /> 结束时间<input type="text" id="jssj" name="jssj" value="{{ jssj|date:"Y-m-d H:i" }}" class="ui_input_txt03" style="width:70px" /> 类型 <select id="type" name="type" class="ui_select02"> <option value=100 selected = "selected">所有</option> <option value=0 {% if type == 0 %} selected = "selected" {% endif %}>日常巡检</option> <option value=1 {% if type == 1 %} selected = "selected" {% endif %}>网络设备配置</option> <option value=2 {% if type == 2 %} selected = "selected" {% endif %}>安全设备配置</option> <option value=3 {% if type == 3 %} selected = "selected" {% endif %}>系统部署</option> <option value=4 {% if type == 4 %} selected = "selected" {% endif %}>安全运维</option> <option value=5 {% if type == 5 %} selected = "selected" {% endif %}>系统更新/维护</option> <option value=6 {% if type == 6 %} selected = "selected" {% endif %}>系统重启</option> <option value=7 {% if type == 7 %} selected = "selected" {% endif %}>系统迁移</option> <option value=8 {% if type == 8 %} selected = "selected" {% endif %}>系统扩容</option> <option value=9 {% if type == 9 %} selected = "selected" {% endif %}>技术支持</option> </select> 机房<select id="machinaroom" name="machinaroom" class="ui_select02" > <option value=100 selected = "selected">所有</option> {% for mr in machinaroomlist %} <option value={{ mr.id }} {% if mr.id == machinaroom %} selected = "selected" {% endif %}>{{ mr.name }}</option> {% endfor %} </select> </div> <div id="box_bottom"> <div class="pagination"> <span class="current"> {% if yunweijilulist.has_previous %} <a href="javascript:void(0)" onclick="search_yunweijilu({{ yunweijilulist.previous_page_number }});">上一页</a> {% endif %} <span class="current"> Page {{ yunweijilulist.number }} of {{ yunweijilulist.paginator.num_pages }}. </span> {% if yunweijilulist.has_next %} <a href="javascript:void(0)" onclick="search_yunweijilu({{ yunweijilulist.next_page_number }});">下一页</a> {% endif %} </span> </div> <input type="button" value="查询" class="ui_input_btn01" onclick="search_yunweijilu(1);"/> <input type="button" value="新增" class="ui_input_btn01" onclick="add_yunweijilu();" /> <input type="button" value="删除" class="ui_input_btn01" onclick="batdel_yunweijilu();" /> <input type="button" value="导出EXCEL" class="ui_input_btn01" onclick="excel_yunweijilu();" /> </div> </form> </div> </div> {% endblock %} {% block content %} <div class="ui_content"> <div class="ui_tb"> <table class="table1" cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> <tr> <th width="30"><input type="checkbox" id="id" name="id" /> </th> <th>类型</th> <th>问题描述</th> <th>问题来源</th> <th>接收时间</th> <th>处理人</th> <th>开始时间</th> <th>结束时间</th> <th>处理办法</th> <th>备注</th> <th>机房</th> <th>操作</th> </tr> {% for s in yunweijilulist.object_list %} <tr> <td><input type="checkbox" name="idcheck" value={{ s.id }} class="acb" /></td> <td> {% if s.type == 0 %} 日常巡检 {% elif s.type == 1 %} 网络设备配置 {% elif s.type == 2 %} 安全设备配置 {% elif s.type == 3 %} 系统部署 {% elif s.type == 4 %} 安全运维 {% elif s.type == 5 %} 系统更新/维护 {% elif s.type == 6 %} 系统重启 {% elif s.type == 7 %} 系统迁移 {% elif s.type == 8 %} 系统扩容 {% elif s.type == 9 %} 技术支持 {% endif %} </td> <td title="{{ s.wtms }}">{{ s.wtms|truncatechars:"8" }}</td> <td title="{{ s.wtly }}">{{ s.wtly|truncatechars:"8" }}</td> <td title="{{ s.wtjssj|date:"Y-m-d H:i" }}">{{ s.wtjssj|date:"Y-m-d" }}</td> <td title="{{ s.clr }}">{{ s.clr|truncatechars:"8" }}</td> <td title="{{ s.kssj|date:"Y-m-d H:i" }}">{{ s.kssj|date:"Y-m-d" }}</td> <td title="{{ s.jssj|date:"Y-m-d H:i" }}">{{ s.jssj|date:"Y-m-d" }}</td> <td title="{{ s.clbf }}">{{ s.clbf|truncatechars:"8" }}</td> <td title="{{ s.memo }}">{{ s.memo|truncatechars:"6"}}</td> <td title="{{ s.machinaroom.name }}">{{ s.machinaroom.name|truncatechars:"8"}}</td> <td> <a href="javascript:void(0)" onclick="edit_yunweijilu('{{ s.id }}')" class="edit">编辑</a> <a href="javascript:void(0)" onclick="del_yunweijilu({{ s.id }},{{ yunweijilulist.number }});">删除</a> </td> </tr> {% endfor %} </table> </div> </div> </div> <script type="text/javascript"> function search_yunweijilu(page){ var wtms = document.getElementById("wtms").value; var wtly = document.getElementById("wtly").value; var clr= document.getElementById("clr").value; var kssj= document.getElementById("kssj").value; var jssj = document.getElementById("jssj").value; var type = document.getElementById("type").value; var machinaroom = document.getElementById("machinaroom").value; var myurl="search_yunweijilu.html"+"?"+"wtms="+wtms+"&&wtly="+wtly+"&&clr="+clr+"&&kssj="+kssj+"&&jssj="+jssj+"&&type="+type+"&&machinaroom="+machinaroom+"&&page="+page; window.location.assign(encodeURI(myurl)) } function add_yunweijilu(){ var width = 400; var height = 500; var left = parseInt((screen.availWidth/2) - (width/2));//屏幕居中 var top = parseInt((screen.availHeight/2) - (height/2)); var windowFeatures = "width=" + width + ",height=" + height + ",status,resizable,left=" + left + ",top=" + top + "screenX=" + left + ",screenY=" + top; newWindow = window.open("add_yunweijilu.html", "subWind", windowFeatures); } function edit_yunweijilu(id){ var width = 400; var height = 500; var left = parseInt((screen.availWidth/2) - (width/2));//屏幕居中 var top = parseInt((screen.availHeight/2) - (height/2)); var windowFeatures = "width=" + width + ",height=" + height + ",status,resizable,left=" + left + ",top=" + top + "screenX=" + left + ",screenY=" + top; newWindow = window.open("edit_yunweijilu.html?id="+id, "subWind", windowFeatures); } function del_yunweijilu(id,page){ if(window.confirm('确定要删除该记录吗?')){ var wtms = document.getElementById("wtms").value; var wtly = document.getElementById("wtly").value; var clr= document.getElementById("clr").value; var kssj= document.getElementById("kssj").value; var jssj = document.getElementById("jssj").value; var type = document.getElementById("type").value; var machinaroom = document.getElementById("machinaroom").value; var myurl="del_yunweijilu.html"+"?"+"id="+id+"&&wtms="+wtms+"&&wtly="+wtly+"&&clr="+clr+"&&kssj="+kssj+"&&jssj="+jssj+"&&type="+type+"&&machinaroom="+machinaroom+"&&page="+page; window.location.assign(encodeURI(myurl)) return true; }else{ //alert("取消"); return false; } } function batdel_yunweijilu(){ if(window.confirm('确定要删除记录吗?')){ obj = document.getElementsByName("idcheck"); var wtms = document.getElementById("wtms").value; var wtly = document.getElementById("wtly").value; var clr= document.getElementById("clr").value; var kssj= document.getElementById("kssj").value; var jssj = document.getElementById("jssj").value; var type = document.getElementById("type").value; var machinaroom = document.getElementById("machinaroom").value; check_val = []; for(k in obj){ if(obj[k].checked) check_val.push(obj[k].value); } var myurl="batdel_yunweijilu.html"+"?"+"ids="+check_val+"&&wtms="+wtms+"&&wtly="+wtly+"&&clr="+clr+"&&kssj="+kssj+"&&jssj="+jssj+"&&type="+type+"&&machinaroom="+machinaroom; window.location.assign(encodeURI(myurl)) return true; }else{ return false; } } function excel_yunweijilu(){ var wtms = document.getElementById("wtms").value; var wtly = document.getElementById("wtly").value; var clr= document.getElementById("clr").value; var kssj= document.getElementById("kssj").value; var jssj = document.getElementById("jssj").value; var type = document.getElementById("type").value; var machinaroom = document.getElementById("machinaroom").value; var myurl="excel_yunweijilu.html"+"?"+"wtms="+wtms+"&&wtly="+wtly+"&&clr="+clr+"&&kssj="+kssj+"&&jssj="+jssj+"&&type="+type+"&&machinaroom="+machinaroom; window.location.assign(encodeURI(myurl)) } </script> {% endblock %} templates/add_yunweijilu.html <!DOCTYPE html> <html> <head> <title>CMDB</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script src="/static/scripts/My97DatePicker/WdatePicker.js" type="text/javascript" defer="defer"></script> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> <script src="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.js"></script> <link href="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.css" rel="stylesheet" /> <script src="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.js"></script> <script type="text/javascript" src="/static/scripts/datetime/jQuery-Timepicker/dist/i18n/jquery-ui-timepicker-zh-CN.js"></script> <link href="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.css" rel="stylesheet" /> <script type="text/javascript"> (function($) { $(function() { $.datepicker.regional['zh-CN'] = { changeMonth: true, changeYear: true, clearText: '清除', clearStatus: '清除已选日期', closeText: '关闭', closeStatus: '不改变当前选择', prevText: '<上月', prevStatus: '显示上月', prevBigText: '<<', prevBigStatus: '显示上一年', nextText: '下月>', nextStatus: '显示下月', nextBigText: '>>', nextBigStatus: '显示下一年', currentText: '今天', currentStatus: '显示本月', monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], monthStatus: '选择月份', yearStatus: '选择年份', weekHeader: '周', weekStatus: '年内周次', dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'], dayStatus: '设置 DD 为一周起始', dateStatus: '选择 m月 d日, DD', dateFormat: 'yy-mm-dd', firstDay: 1, initStatus: '请选择日期', isRTL: false }; }); $(function() { $.datepicker.setDefaults($.datepicker.regional['zh-CN']); $("#yunweijiluwtjssj").datetimepicker(); $("#yunweijilukssj").datetimepicker(); $("#yunweijilujssj").datetimepicker(); }); }(jQuery)); </script> <form id="addyunweijiluform" name="addyunweijiluform" action="add_yunweijilu.html" method="post"> <div id="container"> <div id="nav_links"> 当前位置:运维管理><span style="color: #1A5CC6;">新增运维记录</span> <div id="page_close"> <a href="javascript:parent.$.fancybox.close();"> <img src="/static/images/common/page_close.png" width="20" height="20" style="vertical-align: text-top;"/> </a> </div> </div> <div class="ui_content"> <table cellspacing="0" cellpadding="0" width="100%" align="left" border="0"> <tr> <td class="ui_text_rt">类型:</td> <td class="ui_text_lt"> <select name="yunweijilutype" id="yunweijilutype" class="ui_select01" > <option value=0>日常巡检</option> <option value=1>网络设备配置</option> <option value=2>安全设备配置</option> <option value=3>系统部署</option> <option value=4>安全运维</option> <option value=5>系统更新/维护</option> <option value=6>系统重启</option> <option value=7>系统迁移</option> <option value=8>系统扩容</option> <option value=9>技术支持</option> </select> </td> </tr> <tr> <td class="ui_text_rt">问题描述:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtms" name="yunweijiluwtms" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">问题来源:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtly" name="yunweijiluwtly" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">问题接收时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtjssj" name="yunweijiluwtjssj" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">处理人:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluclr" name="yunweijiluclr" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">开始时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilukssj" name="yunweijilukssj" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">结束时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilujssj" name="yunweijilujssj" value="" class="ui_input_txt02" /> </td> </tr> <tr> </tr> <tr> <td class="ui_text_rt">处理办法:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluclbf" name="yunweijiluclbf" value="" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">备注:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilumemo" name="yunweijilumemo" value="" class="ui_input_txt02" /> </td> </tr> </tr> <tr> <td class="ui_text_rt">机房:</td> <td class="ui_text_lt"> <select name="yunweijilumachinaroom" id="yunweijilumachinaroom" class="ui_select01" > {% for mr in machinaroomlist %} <option value={{ mr.id }}>{{ mr.name }}</option> {% endfor %} </select> </td> </tr> <tr> <td>&nbsp;</td> <td class="ui_text_lt"> &nbsp;<input id="submitbutton" type="submit" value="提交" class="ui_input_btn01"/> &nbsp;<input id="cancelbutton" type="cancel" value="取消" class="ui_input_btn01"/> </td> </tr> </table> </div> </div> </form> </body> </html> templates/edit_yunweijilu.html <!DOCTYPE html> <html> <head> <title>CMDB</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript" src="/static/scripts/jquery/jquery-1.7.1.js"></script> <link href="/static/style/authority/basic_layout.css" rel="stylesheet" type="text/css"> <link href="/static/style/authority/common_style.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="/static/scripts/authority/commonAll.js"></script> <script src="/static/scripts/My97DatePicker/WdatePicker.js" type="text/javascript" defer="defer"></script> <script type="text/javascript" src="/static/scripts/artDialog/artDialog.js?skin=default"></script> <script src="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.js"></script> <link href="/static/scripts/datetime/jquery-ui-1.12.1/jquery-ui.min.css" rel="stylesheet" /> <script src="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.js"></script> <script type="text/javascript" src="/static/scripts/datetime/jQuery-Timepicker/dist/i18n/jquery-ui-timepicker-zh-CN.js"></script> <link href="/static/scripts/datetime/jQuery-Timepicker/dist/jquery-ui-timepicker-addon.min.css" rel="stylesheet" /> <script type="text/javascript"> (function($) { $(function() { $.datepicker.regional['zh-CN'] = { changeMonth: true, changeYear: true, clearText: '清除', clearStatus: '清除已选日期', closeText: '关闭', closeStatus: '不改变当前选择', prevText: '<上月', prevStatus: '显示上月', prevBigText: '<<', prevBigStatus: '显示上一年', nextText: '下月>', nextStatus: '显示下月', nextBigText: '>>', nextBigStatus: '显示下一年', currentText: '今天', currentStatus: '显示本月', monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'], monthNamesShort: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'], monthStatus: '选择月份', yearStatus: '选择年份', weekHeader: '周', weekStatus: '年内周次', dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], dayNamesShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'], dayStatus: '设置 DD 为一周起始', dateStatus: '选择 m月 d日, DD', dateFormat: 'yy-mm-dd', firstDay: 1, initStatus: '请选择日期', isRTL: false }; }); $(function() { $.datepicker.setDefaults($.datepicker.regional['zh-CN']); $("#yunweijiluwtjssj").datetimepicker(); $("#yunweijilukssj").datetimepicker(); $("#yunweijilujssj").datetimepicker(); }); }(jQuery)); </script> </head> <body> <form id="edityunweijiluform" name="edityunweijiluform" action="edit_yunweijilu.html" method="post"> <div id="container"> <div id="nav_links"> 当前位置:配置管理><span style="color: #1A5CC6;">编辑运维记录</span> <div id="page_close"> <a href="javascript:parent.$.fancybox.close();"> <img src="/static/images/common/page_close.png" width="20" height="20" style="vertical-align: text-top;"/> </a> </div> </div> <div class="ui_content"><input style="visibility:hidden" value={{ yunweijilu.id }} type="text" name="id" id="id" /> <table cellspacing="0" cellpadding="0" width="100%" align="left" border="0"> <tr> <td class="ui_text_rt">类型:</td> <td class="ui_text_lt"> <select name="yunweijilutype" id="yunweijilutype" class="ui_select01" > <option value=0 {% if yunweijilu.type == 0 %} selected="selected" {% endif %}>日常巡检</option> <option value=1 {% if yunweijilu.type == 1 %} selected="selected" {% endif %}>网络设备配置</option> <option value=2 {% if yunweijilu.type == 2 %} selected="selected" {% endif %}>安全设备配置</option> <option value=3 {% if yunweijilu.type == 3 %} selected="selected" {% endif %}>系统部署</option> <option value=4 {% if yunweijilu.type == 4 %} selected="selected" {% endif %}>安全运维</option> <option value=5 {% if yunweijilu.type == 5 %} selected="selected" {% endif %}>系统更新/维护</option> <option value=6 {% if yunweijilu.type == 6 %} selected="selected" {% endif %}>系统重启</option> <option value=7 {% if yunweijilu.type == 7 %} selected="selected" {% endif %}>系统迁移</option> <option value=8 {% if yunweijilu.type == 8 %} selected="selected" {% endif %}>系统扩容</option> <option value=9 {% if yunweijilu.type == 9 %} selected="selected" {% endif %}>技术支持</option> </select> </td> </tr> <tr> <td class="ui_text_rt">问题描述:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtms" name="yunweijiluwtms" value="{{ yunweijilu.wtms }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">问题来源:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtly" name="yunweijiluwtly" value="{{ yunweijilu.wtly }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">问题接收时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluwtjssj" name="yunweijiluwtjssj" value="{{ yunweijilu.wtjssj|date:"Y-m-d H:i" }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">处理人:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluclr" name="yunweijiluclr" value="{{ yunweijilu.clr }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">开始时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilukssj" name="yunweijilukssj" value="{{ yunweijilu.kssj|date:"Y-m-d H:i" }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">结束时间:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilujssj" name="yunweijilujssj" value="{{ yunweijilu.jssj|date:"Y-m-d H:i" }}" class="ui_input_txt02" /> </td> </tr> <tr> </tr> <tr> <td class="ui_text_rt">处理办法:</td> <td class="ui_text_lt"> <input type="text" id="yunweijiluclbf" name="yunweijiluclbf" value="{{ yunweijilu.clbf }}" class="ui_input_txt02" /> </td> </tr> <tr> <td class="ui_text_rt">备注:</td> <td class="ui_text_lt"> <input type="text" id="yunweijilumemo" name="yunweijilumemo" value="{{ yunweijilu.memo }}" class="ui_input_txt02" /> </td> </tr> </tr> <tr> <td class="ui_text_rt">机房:</td> <td class="ui_text_lt"> <select name="yunweijilumachinaroom" id="yunweijilumachinaroom" class="ui_select01" > {% for mr in machinaroomlist %} <option value={{ mr.id }} {% if yunweijilu.machinaroom.id == mr.id %} selected="selected" {% endif %}>{{ mr.name }}</option> {% endfor %} </select> </td> </tr> <tr> <td>&nbsp;</td> <td class="ui_text_lt"> &nbsp;<input id="submitbutton" type="submit" value="提交" class="ui_input_btn01"/> &nbsp;<input id="cancelbutton" type="cancel" value="取消" class="ui_input_btn01"/> </td> </tr> </table> </div> </div> </form> </body> </html>

优秀的个人博客,低调大师

来自2016闪存峰会的14个闪亮观点

新的持久性内存及技术承诺会重塑计算。在今年的闪存峰会(Flash Memory Summit)上,工程师们谈到了他们如何从服务器设计和网络存储到机器学习及闪存芯片价格等方方面面推动该领域的变革。 今年大会的一个热门话题就是缩小网络上闪存存储阵列与服务器上固态盘(SSD)之间的差距。系统会访问闪存——不管闪存是本地的还是在数据中心中的,这个想法推动着新的系统、芯片和软件设计向前发展。 为了推动这个趋势,NVM Express组织刚刚发布了一项规范,旨在让NVMe闪存接口可以运行在以太网、光纤通道和InfiniBand这样的网络上。这个所谓的NVMe over Fabric规范用于各种方案可直接访问内存。 即将公布的PCI Express Gen 4标准也将推动这个趋势,部分原因是PCIe已经形成了NVMe的通道。Gen 4的速度将把固态盘上老旧的SAS和SATA接口远远甩在后面。最终PCIe预计将在固态盘中占主导,并且成本相对较低。 美光公司高级架构总监Stefanie Woodbury曾经主导设计了该公司基于3D XPoint的固态盘,他指出,这方面已经做了大量工作。考虑到有三种框架,互操作性是非常关键的:多直连内存、各种块、文件和流存储语义——以及新兴的内存类型,例如3D XPoint。 美光公司的Woodbury展示了3D XPoint SSD原型(图片来源:EE Times) “我在希捷公司的时候,我们推出了首个光纤通道驱动器,这听起来很熟悉,”Woodbury表示。 这个趋势对于全新的闪存控制器设计来说是一个机会,希捷公司首席控制器架构师Tim Canepa这样表示,他之前是在SandForce公司工作。 工程师们并没有通过将SSD和框架控制器打包来创建有效的产品。Canepa表示,我们需要全新的设计,他支出,控制器领域有大量隐身模式的初创公司——其中一些因为市场对于新兴内存类型(例如英特尔/美光的3D XPoint)的需求而得到关注。 其他芯片和系统初创公司也在今年的闪存峰会上展示了他们的装备。Kalray展示了有288个定制VLIW核心的处理器运行NVMe over Ethernet基于2.0版本的直连内存访问方法。 在系统层面,Mangstor展示了他们的双插槽服务器,集成了闪存和Mellanox网卡。但是该公司表示,他们针对NVMe over Fabrics的软件是在SNIA规范推出前公布的,这是他们的秘密武器。 竞争相当激烈。今年大会上E8 Storage凭借自己的闪存阵列赢得了一个奖项,该阵列提供了惊人的1000万IOPS,同时支持在NVMe上100us读和50us写。 NVXL加速器把一个Altera FPGA放在了一个SSD中。 为什么在你可以驾驭两个趋势的时候只驾驭热门的那一个?这就是很多把闪存添加到加速器的产品背后的理念。 BitMicro展示了在SSD上封装英特尔Arria X的NVXL以用于机器学习的算法。这家初创公司的关键技术就是软件,以及将用户在高级Spark数据分析项目中写入连接到低层级FPGA硬件的API。 该公司正在致力于开发一种ASIC,希望明年可以在SSD出货采用这种技术。FPGA版本最早会在今年秋季出来样品。 加速器被打包在一个PCIe Gen3 SSD中,这样用户就可以添加很多个联合处理器到服务器中,只要有充足的PCIe插槽。他们甚至可以构建定制阵列,最多配置24个这样的驱动器。 东芝开发了它自己的混合阵列和加速器Flashmatrix。 东芝决定自己开发这种混合阵列/加速器阵列。东芝的Flashmatrix(上图)封装了24个英特尔Atom 2758处理器(每个有8个核心)和48个Xilinx FPGA到一个2U系统内,该系统有24TB闪存。 这个1.3千瓦的系统目标是运行一系列挑战不那么大、瞄准边缘网络的数据分析任务。这次大会展示的原型使用的是东芝eMMC闪存,但是未来的产品将会采用BiCS闪存。 华为的目标是让多个这样的系统从新的软件堆栈(如下图)开始,可以处理闪存或者任何新型内存。华为首席研究员Balint Fleischer预测,未来将会有一种联合处理器介于大量DRAM和大量驱动器之间,用于处理专门针对特定新应用的内存中的数据。 “我们将以一种类似数据联合处理器的功能块,带有高速引擎用于I/O功能,”Fleischer在谈话中表示。“这种功能可以迁移到CPU本身,”他补充说。 毫无疑问,英特尔将在一年一度的开发者论坛上推出类似的概念,也是自它收购Altera以来首次推出。 的确,这次闪存峰会上有很多人说,主内存与存储之间的界限越来越模糊,未来还会有更多闪存和新型内存。内存已经在计算机设计中打开了新的理念,这将重塑写应用的任务方式。 华为开发了在一种软件堆栈,可以为支持存储级内存的联合处理器提供强大支撑。 SNIA展示了来自4家做得还不错的厂商的NVDIMM。 存储网络行业协会(SNIA)展示了让双带内内存模块与DRAM及闪存(也就是NVDIMM)很好地配合方面取得的进展。它展示了来自Agiga、美光、Netlist以及Smart Modular的NVDIMM,运行在一台服务器上(如上图)。 这并不是第一次有这样的展示,但是有了来自SNIA的标准工作就变得轻松多了,处理BIOS以及处理应用层任务的pmem开源代码。这样软件的负载就不那么重了,厂商希望这个市场将从现有的小规模,开始服务于一些网络设备以及大型数据中心。 Netlist在今年闪存峰会上展示了自己的HybridDIMM(如下),封装了8GB DRAM、256GB闪存以及2个Xilinx FPGA。它宣称,该卡将打破其他厂商对NVDIMM定义的局限性,可应对各种读取密集型应用。Netlest展示了该卡运行在联想和超微的服务器上,并称将会在今年年底前提供样品。 当前的NVDIMM软件将有助于为新型内存铺平道路。Objective Analysis分析师Jim Handy表示,他认为英特尔的3D XPoint DIMM将利用现在不少新软件所采用的接口来处理芯片不断变化的访问时间。 英特尔已经正在将新指令写入自己的x86处理器以应对3D XPoint内存,Handy说。Linux和Windows操作系统将支持新的缓存技术,SNIA也将针对永久性内存制订编程标准。 现在,该行业正需要为此编写大量的应用代码。 Netlist宣称自己的HybridDIMM打破了现有NVDIMM的限制。 多年来,专家预测将会有大量新型内存将介于DRAM和NAND之间,即使到了今天,这种猜测依然存在。 多年来IBM一直在相变内存方面处于领先地位。ARM据称将会涉足CeRAM。各种MRAM也正在积极进入市场。 甚至在今年详细说明了自己3D NAND将在DRAM和NAND之间拉开差距的三星也表示将会在这个领域有所动作。但是在今年的闪存峰会上,3D XPoint是为一个观察者们认为短期内会给市场带来冲击的技术。 “未来10年还会有一两项技术会进入市场,”分析师Handy说。但是当被问及另外一项与XPoint比肩起飞的技术,他说,“我还没有听说任何具有这种影响力的技术”。 对于Marvell来说,它显然将这个领域视为自己最后一级缓存概念的控制器的一个机会。“他们非常关注内存层,我们将会进入到一个其他人都在关注内存层的年代,”Handy表示。 的确,Marvell首席技术官吴子宁展示了最后一级缓存概念以及用于下一代灵活内存控制器的Mochi内联技术。存储级内存需要一种新的硬件缓存引擎,这可能会生成数百万的数据点,需要在纳秒级的时间内处理,他表示。 这样的引擎应该支持多Gb缓存和16Kb缓存线,应该有针对低命中率的设计,以及低开销处理的CAM,在不到10个时钟周期内处理操作。 吴子宁没有说他是否会针对3D XPoint开发这种控制器。不过他说,“我们的控制器将会在大量存储级内存之前做好准备。” 工程师们在西部数据的展台上谈论ReRAM理念。 西数公司(现已收购SanDisk)内存技术负责人Siva Sivaram认为,西数的电阻式RAM将是未来的一股热潮,而不是XPoint。他说,ReRAM技术将会在2020年出货。 “XPint并不是适合未来的技术,”Sivaram在一次谈话中表示。“我们承诺ReRAM是可扩展的,相比XPoint有更高的密度、更低的成本和延迟,以及更高的耐用性。” “随着时间的推移,我们可以开发出一种带有ReRAM技术的通用内存,”他补充说。“我们已经评估了所有选择,决定着是我们要走的方向,”他说。 从他所说的话中可以看出,这对于全球最大的存储公司来说是一件重要的事情。但是,西数目前主要的业务仍然是基于硬盘的。 另一方面,像Crossbar这样的小型初创公司正在开发他们自己的技术。 中国的SMIC公司已经将Crossbar的这样技术带入自己的40纳米制程工艺中。一位公司发言人表示,多个设计方将会在明年推出采用1-8 Mb内置Crossbar内存块的微控制器级SoC,因为它相比内嵌闪存的功能更低、性能更高。 与此同时,Crossbar正在与其他代工厂合作,打造28纳米和40纳米节点的产品。 Crossbar展示了用SMIC 40纳米晶圆制造的内存。 今年的闪存峰会恐怕会因为美光推出备受瞩目的3D XPoint产品给人们留下深刻印象。在主题演讲、谈话、展台采访以及鸡尾酒晚会上,美光都在庆祝自己的Quantx SSD(将在明年提供样品)取得的胜利。 一位资深的系统架构师谈到了XPoint以及新型内存的重要性。. “在我职业生涯的前15年,我认为处理器和指令集架构是最重要的事情,现在我认为将数据迁移进和迁移出计算机是最重要的,”美光高级计算副总裁Steve Pawlowski在一次谈话中这样表示。 Pawlowski曾经在英特尔工作多年,设计从386到Haswell系统。研究未来百亿亿级超级计算机的需求,这让他敏锐地意识到内存瓶颈的重要性,内存瓶颈会“吃掉”如今全球最大规模系统的大部分周期。 他说,他正在于大学、国家实验室和计算机制造商合作,把内存放在未来采用XPoint计算机架构的中心。百亿亿级系统将需要将功耗降低至每个操作25皮焦耳,对新型内存接口的需求,迫使美光“正在与一家有价值的客户”合作开发工作。 美光公司的Pawlowski谈到以内存为中心的计算机系统结构。 此外他还指出,他“在过去三年中已经成为了NVNDIMM的粉丝……起初我认为这种技术只是昙花一现。” 美光研究人员在DRAMA中看到的性能异常问题,是推动3D XPoint相关工作的一个动力。 “我们预计在我们看到它之前会有两代工艺,因此我们开始了围绕XPoint的工作,”他说。“DRAM还将会存在一段时间,我们将会找到修复问题的方法,但是DRAM会变得越来越昂贵……从现在开始的未来20年内,都很难在每比特成本方面打败NAND。” 展望未来,软件将成为以新型内存为核心的计算架构的瓶颈,他这样表示。XPoint让这个行业步入了一条通向新软件生态系统的道路,但是任何新的架构“都需要经过两次夏季奥运会的时间周期”逐渐成熟,他打趣说。 如今,美光正在与一个奥斯汀的团队合作为XPoint配置应用,该团队也在探索如何使用XPoint SSD。“我认为将会有针对现在和未来内存的应用……一旦开发者们有了硬件,软件方面就应该开始考虑这些问题了。” 芯片制造商面对着让3D NAND投入量产的棘手挑战,Handy表示。 关于3D XPoint被用于硬件设备的时间,这个行业可能会突然被淹没在3D NAND中。随着这个行业正在快速远离盘片式的NAND,这会导致价格大幅跳水,出现供过于求的情况,Handy表示。 只有三星和美光在今年批量出货了3D NAND。其他将会提供样品,解决各种挑战来制造这种芯片(如上),Handy表示。他预测所有厂商都将努力推动让成本到2018年年中降低到每GB只有3美分。 在这一点上,他们将把晶圆转向远离盘片式工艺,出现供过于求的情况。他猜测这不会立即影响到SSD的采用。市场对容量和性能的要求将推动对这种驱动器的需求,不会像市场价格那样出现大幅波动,他补充说。 三星表示,他们的64层V-NAND将会大幅降低成本,借助它开发的一种新型扇出封装。 三星踏上3D NAND是从2013年在闪存峰会上宣布首款产品开始的。从那时候开始,三星每一年分别展示了32层、48层和今年的64层版本。 今年组织者给三星电子公司总裁Kinam Kim颁发了成就奖。Kim表示,2003年他作为三星芯片研发部门的负责人时第一次看到盘片式闪存的局限性,并要求就新的电荷捕获技术展开相关工作。 “由一个大型团队十多年的坚定努力让这变成了可能,”他说,他承诺未来会推出超过100层的版本。 Kim做了他分内的工作,到目前为止发表了480片技术论文,多篇论文发表在《科学与自然》上,获得超过130项专利。“目前对闪存的需求正在推动着半导体行业实现新的繁荣,”他说,他称当前的移动时代“是电子行业最大的变革”。 三星希望借助自己变体版3D闪存——Z-NAND来打败3D XPoint。 原文发布时间为:2016年8月15日 本文作者:杨昀煦 本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网。

优秀的个人博客,低调大师

c

“微信指数”悄然推出,或成为营销新利器 昨日晚间,微信官方悄然推出了“微信指数”,这是基于微信大数据分析的移动端指数。腾讯官方表示,用户可能经常看到某个事件在“刷屏”,但没法精确了解它在一段时间内的热度变化。为此,微信开放了大数据能力,希望能给个人或企业提供更多参考价值。一方面,“微信指数”可以对关键词搜索的趋势进行展示,另一方面可以深度挖掘舆情信息、市场需求等多方面的数据特征。微信指数目前主要应用于三种场景,判断趋势、监测舆情、精准营销。 IBM在Interconnect发布系列云产品 IBM公布全新集成服务Cloud Integration、用于构建和管理安全认知应用的IBM Bluemix Container、新云存储产品IBM Cloud Object Storage Flex等众多产品。 阿里、中兴、联通联合工信部打造物联网区块链框架 据Bitcoins Channel报道,阿里、中兴、中国联通及工信部将共同打造一个物联网区块链框架。并已就此计划接触了国际电信联盟。 华为与Software AG合推IoT解决方案 双方将打造必要的硬件和软件,推出基于云的物联网平台,并提供物联网边缘的流动分析功能,双方的合作将首先聚焦于欧洲。 搜狐社区发布停止服务公告,又一个传统BBS倒下了 搜狐社区昨日发布公告称,将于2017年4月20日正式停止服务。搜狐社区自1999年建立,共运营18年。 公告提醒用户,自行保存个人主贴、礼物箱等珍贵资料;自公告发布之日起至社区正式关停,这一期间登录社区并浏览此帖的用户可自动获得“搜狐社区纪念勋章”虚拟礼物。 真传一句话:如果你倾听的目的是想发现真相,你的心就是自由的,不被任何事物限制,它会非常敏锐、活泼、追根究底及好奇,因此它才能发现真相。 本文转自d1net(转载)

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册