硬件系列(二)-------------wifi打印机之佳博wifi打印机踩坑之路

一、前言

之前做过USB打印机,但是现在需求变了,不是使用收银台进行打印机的连接了,而是使用手机与打印机进行打印。手机又无法像收银机一样直接使用USB直接与打印机直接连接进行打印。所以只能使用蓝牙打印机或者wifi打印机了,但是项目的需求中需要使用到语音播报的功能,配备的是蓝牙音箱,故只剩下了wifi打印机了。因为之前使用过佳博的打印机,所以也就直接推荐公司买了佳博的wifi打印机。一直想整理下写一篇博文记录一下,但是一直没有时间,也就不了了之了,趁着现在需求少一点,赶紧撸一个,不多说,直接开撸。

二、佳博打印机配置教程

在上一篇博文硬件系列(一)----------WIFI打印机之使用socket进行打印机搜索中,介绍了wifi打印机的搜索,在这里就不多说了,想了解的就去看另外一篇博文吧。

2.1、配置文件配置





















    
        
    

2.2、添加aidl文件

新建包,包名为com.gprinter.aidl,向包中添加文件,文件名为GpService.aidl内容为:注意,包名要一样哦!!!如下图所示

package com.gprinter.aidl;
interface GpService{  
   int openPort(int PrinterId,int PortType,String DeviceName,int PortNumber);
   void closePort(int PrinterId);
   int getPrinterConnectStatus(int PrinterId);
   int printeTestPage(int PrinterId);   
   void queryPrinterStatus(int PrinterId,int Timesout,int requestCode);
   int getPrinterCommandType(int PrinterId);
   int sendEscCommand(int PrinterId, String b64);
   int sendLabelCommand(int PrinterId, String  b64);
   void isUserExperience(boolean userExperience);
   String getClientID();
   int setServerIP(String ip, int port);
}       

硬件系列(二)-------------wifi打印机之佳博wifi打印机踩坑之路_第1张图片

2.3、启动并绑定 启动并绑定PrinterPrintService服务 

PrinterPrintService我就一起放在打印工具类里面了,如下:

/**
 * @author Freak
 * @date 2019/8/13.
 */

public class PrinterUtil {
    private PrinterServiceConnection conn;
    private BroadCastReceiver mBroadcastReceiver;
    private GpService mGpService;
    private Context context;
    private boolean isBind;

    class PrinterServiceConnection implements ServiceConnection {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            mGpService = GpService.Stub.asInterface(service);

        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            Log.i("ServiceConnection", "onServiceDisconnected() called");
            mGpService = null;
        }
    }

    public PrinterUtil(Context context) {
        this.context = context;
        mBroadcastReceiver = new BroadCastReceiver();
        connection();
        doRegisterReceiver();
    }

    /**
     * 连接 开启服务
     *
     * @param
     */
    private void connection() {
        LogUtil.e("开启打印服务");
        conn = new PrinterServiceConnection();
        Intent intent = new Intent(context, GpPrintService.class);
        // bindService
        isBind = context.bindService(intent, conn, Context.BIND_AUTO_CREATE);
    }

    /**
     * 注册广播
     *
     * @param
     */
    public void doRegisterReceiver() {
        // 注册实时状态查询广播
        context.registerReceiver(mBroadcastReceiver, new IntentFilter(GpCom.ACTION_DEVICE_REAL_STATUS));
        /**
         * 票据模式下,可注册该广播,在需要打印内容的最后加入addQueryPrinterStatus(),在打印完成后会接收到
         * action为GpCom.ACTION_DEVICE_STATUS的广播,特别用于连续打印,
         * 可参照该sample中的sendReceiptWithResponse方法与广播中的处理
         **/
        context.registerReceiver(mBroadcastReceiver, new IntentFilter(GpCom.ACTION_RECEIPT_RESPONSE));
        /**
         * 标签模式下,可注册该广播,在需要打印内容的最后加入addQueryPrinterStatus(RESPONSE_MODE mode)
         * ,在打印完成后会接收到,action为GpCom.ACTION_LABEL_RESPONSE的广播,特别用于连续打印,
         * 可参照该sample中的sendLabelWithResponse方法与广播中的处理
         **/
        context.registerReceiver(mBroadcastReceiver, new IntentFilter(GpCom.ACTION_LABEL_RESPONSE));
    }

    /**
     * 连接打印机
     */
    public void connectToDevice(String ip, int port) {
        int rel = 0;
        try {
            rel = mGpService.openPort(0, 3, ip, port);
            LogUtil.e("开始连接");
        } catch (RemoteException e) {
            e.printStackTrace();
        }

        GpCom.ERROR_CODE r = GpCom.ERROR_CODE.values()[rel];

        if (r == GpCom.ERROR_CODE.SUCCESS) {
            LogUtil.e("打印机连接成功");
        } else {
            LogUtil.e("连接失败原因--》" + GpCom.getErrorText(r));
        }
        LogUtil.e("打印机连接状态--》" + GpCom.getErrorText(r));

    }

    /**
     * 断开连接、关闭端口
     */
    public void disConnectToDevice() {
        try {
            mGpService.closePort(0);
            LogUtil.e("关闭端口");
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }


    /***
     * 查询打印机连接状态
     */
    public void checkPrintLinStatus() {
        try {
            int printStatus = mGpService.getPrinterConnectStatus(0);
            switch (printStatus) {
                case 0:
                    LogUtil.e("连接断开");
                    break;
                case 1:
                    LogUtil.e("监听状态");
                    break;
                case 2:
                    LogUtil.e("正在连接");
                    break;
                case 3:
                    LogUtil.e("已连接");
                    break;
                default:
                    break;
            }
        } catch (RemoteException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }

    /**
     * 后台控制打印格式方式打印测试
     *
     * @param arg
     */
    public void printFormat(String arg) {
        Map styleMap = new HashMap<>();
        styleMap.put("
", "CENTER"); styleMap.put("", "CENTER_BOLD"); styleMap.put("", "TITLE"); styleMap.put("<left>", "LEFT"); styleMap.put("<left_bold>", "LEFT_BOLD"); styleMap.put("<right>", "RIGHT"); styleMap.put("<right_bold>", "RIGHT_BOLD"); styleMap.put("<bold>", "BOLD"); Stack stack = new Stack<String>(); StringBuffer sb = new StringBuffer(); int pos = 0; boolean flag; int start = 0; int end = 0; String type = ""; List<String> typeList = new ArrayList<>(); List<String> printTextList = new ArrayList<>(); while (arg.length() > pos) { flag = true; if (arg.charAt(pos) == '<') { for (Object key : styleMap.keySet()) { if (arg.length() > (pos + key.toString().length()) && arg.substring(pos, pos + key.toString().length()).equals(key)) { type = styleMap.get(key).toString(); stack.push(styleMap.get(key)); pos += key.toString().length(); start = pos; flag = false; break; } } if (flag) { pos = arg.indexOf('>', pos) + 1; if (!stack.isEmpty()) { int length = stack.lastElement().toString().length(); end = pos - length - 4; typeList.add(type); printTextList.add(arg.substring(start, end + 1)); stack.pop(); } } } else { sb.append(arg.charAt(pos)); pos++; } } Logger.e(sb.toString()); typeList.add("end"); printTextList.add("-------------------------------"); startPrint(typeList, printTextList); } public void startPrint(List<String> type, List<String> printText) { EscCommand escCommand = new EscCommand(); escCommand.addInitializePrinter(); for (int i = 0; i < type.size(); i++) { if ("CENTER_BOLD".equals(type.get(i))) { //设置打印居中 escCommand.addSelectJustification(EscCommand.JUSTIFICATION.CENTER); //设置加粗 escCommand.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.ON, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF); //是否加重 escCommand.addTurnDoubleStrikeOnOrOff(EscCommand.ENABLE.ON); escCommand.addText(printText.get(i)); escCommand.addPrintAndFeedLines((byte) 1); } else if ("TITLE".equals(type.get(i))) { escCommand.addSelectJustification(EscCommand.JUSTIFICATION.CENTER); //设置不加粗 escCommand.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.ON, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF); escCommand.addText(printText.get(i)); escCommand.addPrintAndFeedLines((byte) 2); } else if ("CENTER".equals(type.get(i))) { escCommand.addSelectJustification(EscCommand.JUSTIFICATION.CENTER); //设置不加粗 escCommand.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF); escCommand.addText(printText.get(i)); escCommand.addPrintAndFeedLines((byte) 1); } else if ("LEFT".equals(type.get(i))) { escCommand.addSelectJustification(EscCommand.JUSTIFICATION.LEFT); //设置不加粗 escCommand.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF); escCommand.addText(printText.get(i)); escCommand.addPrintAndFeedLines((byte) 1); } else if ("LEFT_BOLD".equals(type.get(i))) { escCommand.addSelectJustification(EscCommand.JUSTIFICATION.LEFT); //设置不加粗 escCommand.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.ON, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF); //是否加重 escCommand.addTurnDoubleStrikeOnOrOff(EscCommand.ENABLE.ON); escCommand.addText(printText.get(i)); escCommand.addPrintAndFeedLines((byte) 1); } else if ("RIGHT".equals(type.get(i))) { escCommand.addSelectJustification(EscCommand.JUSTIFICATION.RIGHT); escCommand.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF); escCommand.addText(printText.get(i)); escCommand.addPrintAndFeedLines((byte) 1); } else if ("RIGHT_BOLD".equals(type.get(i))) { escCommand.addSelectJustification(EscCommand.JUSTIFICATION.RIGHT); escCommand.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.ON, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF); escCommand.addTurnDoubleStrikeOnOrOff(EscCommand.ENABLE.ON); escCommand.addText(printText.get(i)); escCommand.addPrintAndFeedLines((byte) 1); } else if ("END".equals(type.get(i))) { escCommand.addSelectJustification(EscCommand.JUSTIFICATION.LEFT); escCommand.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF); escCommand.addText(printText.get(i)); escCommand.addPrintAndFeedLines((byte) 2); } else { escCommand.addSelectJustification(EscCommand.JUSTIFICATION.LEFT); escCommand.addSelectPrintModes(EscCommand.FONT.FONTA, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF, EscCommand.ENABLE.OFF); escCommand.addText(printText.get(i)); escCommand.addPrintAndFeedLines((byte) 1); } } escCommand.addPrintAndLineFeed(); // 加入查询打印机状态,打印完成后,此时会接收到GpCom.ACTION_DEVICE_STATUS广播 escCommand.addQueryPrinterStatus(); // 发送数据 Vector<Byte> data = escCommand.getCommand(); byte[] bytes = GpUtils.ByteTo_byte(data); String sss = Base64.encodeToString(bytes, Base64.DEFAULT); int rs; try { rs = mGpService.sendEscCommand(0, sss); GpCom.ERROR_CODE r = GpCom.ERROR_CODE.values()[rs]; if (r != GpCom.ERROR_CODE.SUCCESS) { disConnectToDevice(); } else { disConnectToDevice(); mHandler.sendEmptyMessage(0); } } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void printerOnDestroy() { if (conn != null) { // unBindService //解决14254 java.lang.IllegalArgumentException Service not registered错误 此错误在执行解绑成功之后在进行解绑导致的错误 if (isBind) { context.unbindService(conn); context.unregisterReceiver(mBroadcastReceiver); isBind = false; LogUtil.e("解绑服务"); } } } /** * 查询打印机状态并返回 * * @return */ public int isLin() { int printStatus = 0; try { printStatus = mGpService.getPrinterConnectStatus(0); } catch (RemoteException e) { e.printStackTrace(); } return printStatus; } @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case 0: LogUtil.e("打印成功"); ToastUtil.show("打印成功"); break; default: break; } } }; }</code></pre> <h2>2.4、BroadCastReceiver类</h2> <pre><code class="language-html hljs">/** * @author Freak * @date 2019/8/13. */ public class BroadCastReceiver extends BroadcastReceiver { private static final int REQUEST_PRINT_RECEIPT = 0xfc; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); LogUtil.e("Action-->" + action); // GpCom.ACTION_DEVICE_REAL_STATUS 为广播的IntentFilter if (action.equals(GpCom.ACTION_DEVICE_REAL_STATUS)) { // 业务逻辑的请求码,对应哪里查询做什么操作 int requestCode = intent.getIntExtra(GpCom.EXTRA_PRINTER_REQUEST_CODE, -1); // 判断请求码,是则进行业务操作 if (requestCode == REQUEST_PRINT_RECEIPT) { int status = intent.getIntExtra(GpCom.EXTRA_PRINTER_REAL_STATUS, 16); String str; if (status == GpCom.STATE_NO_ERR) { str = "打印机正常"; } else { str = "打印机 "; if ((byte) (status & GpCom.STATE_OFFLINE) > 0) { str += "脱机"; } if ((byte) (status & GpCom.STATE_PAPER_ERR) > 0) { str += "缺纸"; } if ((byte) (status & GpCom.STATE_COVER_OPEN) > 0) { str += "打印机开盖"; } if ((byte) (status & GpCom.STATE_ERR_OCCURS) > 0) { str += "打印机出错"; } if ((byte) (status & GpCom.STATE_TIMES_OUT) > 0) { str += "查询超时"; } } LogUtil.e("打印机状态--》" + str); ToastUtil.show(str); } } } } </code></pre> <h2>2.4、打印测试方法</h2> <pre><code class="language-html hljs">public void checkLinStatusBeforePrint(final String ip, final int port) { int mLin = App.getPrinterUtilInstance().isLin(); LogUtil.e("连接返回状态--》" + mLin); switch (mLin) { //连接断开 case 0: mHandler.sendEmptyMessage(0); break; //监听状态 case 1: break; //正在连接,延迟一秒再次查询状态 case 2: //延迟1秒后再检查连接状态 if (count > 20) { ToastUtil.show("无法连接打印机,请检查打印机是否正常工作,稍后重试"); } else { new Handler().postDelayed(new Runnable() { @Override public void run() { mHandler.sendEmptyMessage(2); } }, 100); count++; } break; //连接成功 case 3: count = 0; ThreadPoolProxyFactory.getNormalThreadPoolProxy().execute(new Runnable() { @Override public void run() { App.getPrinterUtilInstance().printFormat( "<center_bold>打印测试</center_bold>" + "<left>测试金额:66686.3</left>" ); } }); break; default: break; } } </code></pre> <p> </p> <pre><code class="language-html hljs">/** * 查找打印Handel、检查打印机状态Handel */ @SuppressLint("HandlerLeak") private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { //断开连接 case 0: //sp文件保存的是否开启打印 boolean isOpenPrinter = SharedPreferencesUtils.getBoolean(getActivity(), SharedPreferencesUtils.Printer_Open_Status); if (isOpenPrinter) { if (TextUtils.isEmpty(getIpAddress())) { ToastUtil.show("请先设置打印机ip地址"); } else { App.getPrinterUtilInstance().connectToDevice(getIpAddress(), 9100); checkLinStatusBeforePrint(getIpAddress(), 9100); } } else { ToastUtil.show("打印机未打开,请到打印机设置中打开打印机"); } break; //搜索结束 case 1: setSharedPreferencesIpAddress(); break; //正在连接 case 2: //sp文件保存的是否开启打印 boolean mIsOpenPrinter = SharedPreferencesUtils.getBoolean(getActivity(), SharedPreferencesUtils.Printer_Open_Status); if (mIsOpenPrinter) { if (TextUtils.isEmpty(getIpAddress())) { ToastUtil.show("请先设置打印机ip地址"); } else { checkLinStatusBeforePrint(getIpAddress(), 9100); } } else { ToastUtil.show("打印机未打开,请到打印机设置中打开打印机"); } break; case 4: ToastUtil.show("连接成功"); break; case 5: mPrinterSettingAdapter.setNewData(mList); break; case 6: ToastUtil.show("连接失败"); break; default: break; } } }; private void setSharedPreferencesIpAddress() { for (int i = 0; i < mList.size(); i++) { if (mList.get(i).isSelect()) { SharedPreferencesUtils.save(getActivity(), SharedPreferencesUtils.Printer_IP_Address, mList.get(i).getIp()); } else { SharedPreferencesUtils.save(getActivity(), SharedPreferencesUtils.Printer_IP_Address, ""); } } } </code></pre> <p> </p> <p>到此,佳博wifi打印机的打印就完成了,当然,这个是使用sdk进行打印的,sdk可以在下载中进行下载。</p> <h2> </h2> <h2> </h2> <h2> </h2> <h2> </h2> <h2> </h2> <h2> </h2> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1187762527082225664"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(wifi打印机系列,硬件)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1901578598574256128.htm" title="自动驾驶中间件技术对比" target="_blank">自动驾驶中间件技术对比</a> <span class="text-muted">小牛蛋</span> <a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%8A%A8%E9%A9%BE%E9%A9%B6/1.htm">自动驾驶</a><a class="tag" taget="_blank" href="/search/%E4%B8%AD%E9%97%B4%E4%BB%B6/1.htm">中间件</a> <div>转载:自动驾驶中间件技术辨析:ROS、Apex.Grace、DDS、AutoSAR和AutoSARAdaptive-CSDN博客在自动驾驶技术的演进中,中间件作为连接硬件、操作系统与应用软件的核心枢纽,其安全性、实时性和可扩展性至关重要。当前市场上主流的中间件技术包括ROS/ROS2、Apex.Grace(Apex.OS)、DDS、AutoSAR(经典平台CP)和AutoSARAdaptive(自</div> </li> <li><a href="/article/1901559190502043648.htm" title="嵌入式C语言进阶(汇总)系统化详解" target="_blank">嵌入式C语言进阶(汇总)系统化详解</a> <span class="text-muted">niuTaylor</span> <a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>以下是嵌入式C语言进阶知识的系统化详解,结合嵌入式开发的实际需求和典型场景:一、硬件级编程技巧1.位操作与寄存器控制//位掩码操作(STM32GPIO控制示例)#defineGPIO_PIN5(1USR&=~TIM_SR_UIF;//2.最小化处理逻辑staticuint32_tcounter=0;counter++;//3.避免调用不可重入函数//4.禁止使用浮点运算(除非启用FPU上下文保存)</div> </li> <li><a href="/article/1901558432041857024.htm" title="ollama下载的DeepSeek的模型(Model)文件在哪里?(C盘下)" target="_blank">ollama下载的DeepSeek的模型(Model)文件在哪里?(C盘下)</a> <span class="text-muted">神秘泣男子</span> <a class="tag" taget="_blank" href="/search/%E5%B8%B8%E8%A7%81AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2%E4%B8%8E%E5%BA%94%E7%94%A8/1.htm">常见AI大模型部署与应用</a><a class="tag" taget="_blank" href="/search/Ollama%E9%83%A8%E7%BD%B2LLM/1.htm">Ollama部署LLM</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/ollama/1.htm">ollama</a><a class="tag" taget="_blank" href="/search/llama/1.htm">llama</a><a class="tag" taget="_blank" href="/search/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86/1.htm">自然语言处理</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>目录一、下载大模型(DeepSeek)2.安装Ollama3.检查安装是否成功二、拉取大模型(DeepSeek)1.打开命令行2.下载模型3.测试下载4.等待下载完成三.模型存放路径这个位置!!在人工智能快速发展的今天,大语言模型已经成为许多人探索和使用的热门技术。而Ollama作为一款轻量级的本地大模型运行工具,让我们能够在个人电脑上体验各种强大的AI模型,如DeepSeek系列。不少用户在安装</div> </li> <li><a href="/article/1901553770811158528.htm" title="matlab从无到有系列(二):矩阵运算基础" target="_blank">matlab从无到有系列(二):矩阵运算基础</a> <span class="text-muted">左手の明天</span> <a class="tag" taget="_blank" href="/search/Matlab/1.htm">Matlab</a><a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/%E7%9F%A9%E9%98%B5/1.htm">矩阵</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1.htm">线性代数</a> <div>目录矩阵运算典例各种矩阵的生成全一矩阵、全零矩阵和单位矩阵随机矩阵特殊矩阵矩阵的范式矩阵旋转和矩阵变维矩阵运算典例2.1在MATLAB中如何建立矩阵,并将其赋予变量a?>> a=[573;491]2.2有几种建立矩阵的方法?各有什么优点?</div> </li> <li><a href="/article/1901552505695825920.htm" title="探索网络安全:浅析文件上传漏洞" target="_blank">探索网络安全:浅析文件上传漏洞</a> <span class="text-muted">做梦都在改BUG</span> <a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/php/1.htm">php</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a> <div>在数字化时代,网络安全已成为我们每个人都需要关注的重要议题。无论是个人隐私保护,还是企业数据安全,网络威胁无处不在。了解网络安全的基本知识和防护措施,对我们每个人来说都至关重要。网络安全网络安全并非只是对网络做一层防护,而是指保护网络空间的安全,包括硬件、软件、数据和网络本身的安全。随着互联网的普及,我们的个人信息、财产安全乃至国家安全都与网络安全息息相关。网络安全不仅仅是技术问题,更是意识问题。</div> </li> <li><a href="/article/1901550110651772928.htm" title="diy nas配置推荐2019_打造家用NAS之一(2019年版)" target="_blank">diy nas配置推荐2019_打造家用NAS之一(2019年版)</a> <span class="text-muted">weixin_39691748</span> <a class="tag" taget="_blank" href="/search/diy/1.htm">diy</a><a class="tag" taget="_blank" href="/search/nas%E9%85%8D%E7%BD%AE%E6%8E%A8%E8%8D%902019/1.htm">nas配置推荐2019</a> <div>大概6年前写了一些自己DIYNAS的文档,发表在http://newsmth.net上面。过了好多年再修改一下之前的文档,发布在这里,供大家参考。自己弄家用存储方面的东西算下来也有几年了。于是现在写点东西总结一下,也方便对这方面有兴趣的网友参考。希望大家看了之后能够少走弯路,造个适合自己的NAS。基本有如下的内容:什么类型的存储适合我?硬件选型OS安装基本配置性能调整总结与展望1.什么类型的存储适</div> </li> <li><a href="/article/1901547084989919232.htm" title="Cesium在三维模型中的应用" target="_blank">Cesium在三维模型中的应用</a> <span class="text-muted">IT邦少</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E8%B4%B4%E5%9B%BE/1.htm">贴图</a> <div>Cesium在三维模型中的应用Cesium简介Cesium介绍Cesium是一个跨平台,跨浏览器的展示三维地球和地图的javascript库Cesium使用WebGL来进行硬件加速图形,使用时不需要任何插件支持,但是浏览器必须支持WebGLCesium是基于Apache2.0许可的开源程序,它可以免费的用于商业和非商业用途Cesium特点支持2D,2.5D,3D形式的地图展示可以绘制各种几何图形,</div> </li> <li><a href="/article/1901546201396867072.htm" title="【数学基础】线性代数#1向量和矩阵初步" target="_blank">【数学基础】线性代数#1向量和矩阵初步</a> <span class="text-muted">-一杯为品-</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E5%AD%A6/1.htm">数学</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0/1.htm">线性代数</a><a class="tag" taget="_blank" href="/search/%E7%9F%A9%E9%98%B5/1.htm">矩阵</a> <div>本系列内容介绍:主要参考资料:《深度学习》[美]伊恩·古德菲洛等著《机器人数学基础》吴福朝张铃著文章为自学笔记,仅供参考。目录标量、向量、矩阵和张量矩阵运算单位矩阵和逆矩阵线性相关和生成子空间范数特殊类型的矩阵和向量特征分解奇异值分解Moore-Penrose伪逆迹运算行列式标量、向量、矩阵和张量标量标量是一个单独的数。向量向量是一列有序排列的数:x=[x1x2⋮xn]\boldsymbolx=\</div> </li> <li><a href="/article/1901536115173683200.htm" title="运维面试常问的100道题(大数据统计)" target="_blank">运维面试常问的100道题(大数据统计)</a> <span class="text-muted">無爲謂</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>一、基础知识类1、请解释什么是运维?运维是指对企业的IT系统进行运行维护,包括硬件设备、软件系统、网络等的监控、管理、优化和故障处理,以确保系统的稳定、高效运行,满足业务需求。2、简述运维的主要职责有哪些?服务器的安装、配置、维护和监控。网络设备的管理和维护。数据库的管理和维护。应用系统的部署、升级和维护。故障处理和应急响应。性能优化和容量规划。安全管理和漏洞修复。3、什么是服务器?有哪些类型?服</div> </li> <li><a href="/article/1901533505377071104.htm" title="数字新基建浪潮下:5G时代项目管理工具选型指南" target="_blank">数字新基建浪潮下:5G时代项目管理工具选型指南</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a> <div>随着数字化时代的加速推进,数字新基建浪潮正以前所未有的力量重塑着各个行业。在这股浪潮中,5G技术的广泛应用成为了关键驱动力。而对于企业和项目管理者来说,如何在5G时代选择合适的项目管理工具,以提高项目的效率和质量,成为了一个至关重要的问题。本文将为您提供一份全面的5G时代项目管理工具选型指南,帮助您在众多选择中找到最适合自己的工具。5G时代项目管理的新挑战与需求在5G时代,项目管理面临着一系列新的</div> </li> <li><a href="/article/1901525305659551744.htm" title="解析京东商品详情 API 接口 item_get" target="_blank">解析京东商品详情 API 接口 item_get</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">服务器深度学习数据挖掘</a> <div>在电商行业蓬勃发展的当下,数据的获取与分析对于企业和开发者而言至关重要。京东作为国内领先的电商平台,提供了丰富的商品资源。为了能够高效地获取京东商品的详细信息,京东开放平台提供了一系列API接口,其中item_get接口在获取商品详情方面发挥着核心作用。本文将深入探讨item_get接口的技术细节、使用场景以及相关实践经验。一、item_get接口概述item_get接口是京东开放平台提供的用于获</div> </li> <li><a href="/article/1901519596091928576.htm" title="Python学习日记-第二十九天-tcp(客户端)" target="_blank">Python学习日记-第二十九天-tcp(客户端)</a> <span class="text-muted">差点长成吴彦祖</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/pandas/1.htm">pandas</a><a class="tag" taget="_blank" href="/search/tcp%2Fip/1.htm">tcp/ip</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>系列文章目录tcp介绍tcp特点tcp客户端一、tcp介绍Tcp协议,传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义TCP通信需要经过创建连接、传输数据、终止连接三个步骤TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中的“打电话”(注:之前学习的udp,在通信前,不需要建立相关的链接,只需要发送数据即可,类似于“写</div> </li> <li><a href="/article/1901516822000234496.htm" title="【step by step】Easyi3C Host I3C/I2C adapter (8)" target="_blank">【step by step】Easyi3C Host I3C/I2C adapter (8)</a> <span class="text-muted">Scott.W</span> <a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%8A%9F%E8%83%BD%E6%B5%8B%E8%AF%95/1.htm">功能测试</a> <div>Easyi3C是一家领先的嵌入式系统工具供应商,可简化各种通信协议的开发和调试。公司提供一系列产品,旨在帮助工程师和开发人员更高效地使用I3C/I2C、USB和MIPI、JEDEC、MCTP等协议。Easyi3C提供PythonAPI。用户可以使用Python脚本对Easyi3C进行编程和控制,通过I2C或I3C协议访问从设备。API的使用,适合用户搭建更加复杂的测试环境,对提高自动化测试程度会有</div> </li> <li><a href="/article/1901512410150268928.htm" title="【Repos系列】Bandersnatch同步原理" target="_blank">【Repos系列】Bandersnatch同步原理</a> <span class="text-muted">yunqi1215</span> <a class="tag" taget="_blank" href="/search/Basic/1.htm">Basic</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>Bandersnatch是PyPI(PythonPackageIndex)的官方镜像工具,旨在高效同步和维护PyPI的完整本地副本。其核心原理围绕元数据抓取、增量同步、文件校验和并发下载,以下为详细工作流程:1.元数据抓取与包列表生成PyPI接口:Bandersnatch通过PyPI的JSONAPI(如https://pypi.org/pypi/{package}/json)获取所有包的元数据。主</div> </li> <li><a href="/article/1901510143258980352.htm" title="网安工具系列:雷池waf社区版安装、配置使用" target="_blank">网安工具系列:雷池waf社区版安装、配置使用</a> <span class="text-muted">坦笑&&life</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8/1.htm">网络安全</a> <div>雷池waf社区版安装以及相关问题解决一.雷池waf社区版安装什么是WAFWAF部署架构雷池waf的网站地址雷池的github地址官网是文档地址,中文文档,不会就去翻翻。waf的离线安装安装雷池配置需求可以逐行执行以下命令来确认服务器配置有三种安装方式供选择离线安装二.雷池waf社区版-配置使用(2)1防护站点-http域名的添加2防护站点-https域名证书的添加1证书的上传3测试防护效果参考官网</div> </li> <li><a href="/article/1901500053298671616.htm" title="(十一)CSharp-LINQ-标准查询运算符(3)" target="_blank">(十一)CSharp-LINQ-标准查询运算符(3)</a> <span class="text-muted">CRongQ</span> <a class="tag" taget="_blank" href="/search/CSharp/1.htm">CSharp</a><a class="tag" taget="_blank" href="/search/linq/1.htm">linq</a><a class="tag" taget="_blank" href="/search/c%23/1.htm">c#</a> <div>一、标准查询运算符1、概念标准查询运算符由一系列API方法组成,API能让我们查询任何.NET数组或集合。标准运算符的要点:标准查询运算符使用方法语法。一些运算符返回Ienumerable对象(或其他序列),而其他运算符返回标量。返回标量的运算符立即执行查询,并返回一个值,而不是一个可枚举类型对象。ToArray()、ToList()等ToCollection运算符也会立即执行。很多操作都以一个谓</div> </li> <li><a href="/article/1901498162464485376.htm" title="38份DeepSeek核心资料汇总|可下载" target="_blank">38份DeepSeek核心资料汇总|可下载</a> <span class="text-muted">航锦234</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/pdf/1.htm">pdf</a> <div>资料链接:https://pan.quark.cn/s/b469ed4018ff为了方便大家查找和使用,我们对之前发布过的DeepSeek系列学习资料进行了分类和汇总。内容包括但不限于清北浙DeepSeek课件资料汇总manus学习资料DeepSeek实操变现指南DeepSeek本地部署教学等等点击最上方链接即可保存下载~</div> </li> <li><a href="/article/1901486439636463616.htm" title="AI 大模型应用数据中心建设:高性能计算与存储架构" target="_blank">AI 大模型应用数据中心建设:高性能计算与存储架构</a> <span class="text-muted">AI智能涌现深度研究</span> <a class="tag" taget="_blank" href="/search/AI%E5%A4%A7%E6%A8%A1%E5%9E%8B%E5%BA%94%E7%94%A8%E5%85%A5%E9%97%A8%E5%AE%9E%E6%88%98%E4%B8%8E%E8%BF%9B%E9%98%B6/1.htm">AI大模型应用入门实战与进阶</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/kotlin/1.htm">kotlin</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>AI大模型、数据中心、高性能计算、存储架构、分布式训练、GPU加速、数据管理1.背景介绍近年来,人工智能(AI)技术取得了飞速发展,特别是深度学习模型的突破性进展,催生了一系列基于大规模数据训练的强大AI模型,例如GPT-3、BERT、DALL-E等。这些AI大模型在自然语言处理、计算机视觉、语音识别等领域展现出强大的应用潜力,但也对计算资源和数据存储提出了极高的要求。传统的计算架构难以满足AI大</div> </li> <li><a href="/article/1901486187378438144.htm" title="解决注入mapper报红的问题" target="_blank">解决注入mapper报红的问题</a> <span class="text-muted">Jyannis</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Spring/1.htm">Spring</a><a class="tag" taget="_blank" href="/search/Boot/1.htm">Boot</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a> <div>在spring系列集成mybatis时,我们经常遇到这样的问题:明明注入没有问题,但是intellijidea会报红。这是因为我们没有手动在代码里把mapper接口注入spring容器中,而@Autowired注入方式默认要求注入的对象必须是在spring容器中存在的。所以idea认为这里的userMapper不存在,而用户(我们)选择注入,是一种错误操作,就报红。那么怎么解决这个问题呢?以下提供</div> </li> <li><a href="/article/1901483414192713728.htm" title="人工智能直通车系列24【机器学习基础】(机器学习模型评估指标(回归))" target="_blank">人工智能直通车系列24【机器学习基础】(机器学习模型评估指标(回归))</a> <span class="text-muted">浪九天</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E7%9B%B4%E9%80%9A%E8%BD%A6/1.htm">人工智能直通车</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/1.htm">神经网络</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>目录机器学习模型评估指标(回归)1.均方误差(MeanSquaredError,MSE)2.均方根误差(RootMeanSquaredError,RMSE)3.平均绝对误差(MeanAbsoluteError,MAE)4.决定系数(CoefficientofDetermination,R2)机器学习模型评估指标(回归)1.均方误差(MeanSquaredError,MSE)详细解释均方误差是回归问</div> </li> <li><a href="/article/1901477870430121984.htm" title="【11】单片机编程核心技巧:进制玄机" target="_blank">【11】单片机编程核心技巧:进制玄机</a> <span class="text-muted">智木芯语</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a> <div>【11】单片机编程核心技巧:进制玄机七律·进制玄机二进根基硬件生,八灯辉映万千形。字节八位藏寰宇,变量范围定始终。十六缩影通寄存,十进直观映真容。实验验证真理明,编程妙用万象成。摘要本文系统阐述了单片机编程中二进制、十六进制与十进制的转换方法及其应用。首先,从硬件基础出发,分析了二进制在数字电路中的核心地位,并结合变量位数与取值范围的实例,揭示了二进制在数据存储与运算中的重要性。其次,通过十六进制</div> </li> <li><a href="/article/1901477114822062080.htm" title="中断向量表" target="_blank">中断向量表</a> <span class="text-muted">Cold_Johnsnow</span> <a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/arm%E4%BD%93%E7%B3%BB%E7%BB%93%E6%9E%84%E4%B8%8E%E7%BC%96%E7%A8%8B/1.htm">arm体系结构与编程</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8/1.htm">驱动</a><a class="tag" taget="_blank" href="/search/arm%E5%BC%80%E5%8F%91/1.htm">arm开发</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a> <div>中断向量表(InterruptVectorTable,IVT)是单片机(或处理器)中实现中断机制的核心数据结构,其作用类似于硬件与中断服务程序(ISR)之间的"导航地图"。它直接决定了系统在中断触发时如何快速定位到对应的处理代码。以下从技术原理、实现机制和应用设计三个层面进行深度解析:硬件级工作原理物理存储结构中断向量表存储在内存的固定起始地址(如ARMCortex-M固定在0x08000000,</div> </li> <li><a href="/article/1901475850633670656.htm" title="加密狗工作原理和破解方法简介" target="_blank">加密狗工作原理和破解方法简介</a> <span class="text-muted">阿湯哥</span> <a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%AF%86%E7%8B%97/1.htm">加密狗</a><a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E5%8A%A0%E5%AF%86/1.htm">硬件加密</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E5%8A%A0%E5%AF%86/1.htm">软件加密</a> <div>加密狗破解原理和破解方法介绍工作原理破解方法总结参考工作原理加密狗是目前流行的一种软件加密工具。它是插在计算机接口上的软硬件结合的软件加密产品。一般有USB口和并口两种,又称USB加密狗和并口加密狗,目前流行的一般是USB加密狗,并口加密狗在前几年的时候用得比较多。加密狗内部一般都有几十到几十K字节的存储空间可供读写,有的内部还增添了一个单片机。软件运行时通过向狗发送消息,判断从接口返回密码(简单</div> </li> <li><a href="/article/1901472193175416832.htm" title="Hive SQL 精进系列:REGEXP_REPLACE 函数的用法" target="_blank">Hive SQL 精进系列:REGEXP_REPLACE 函数的用法</a> <span class="text-muted">进一步有进一步的欢喜</span> <a class="tag" taget="_blank" href="/search/Hive/1.htm">Hive</a><a class="tag" taget="_blank" href="/search/SQL/1.htm">SQL</a><a class="tag" taget="_blank" href="/search/%E7%B2%BE%E8%BF%9B%E7%B3%BB%E5%88%97/1.htm">精进系列</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>目录一、引言二、REGEXP_REPLACE函数基础2.1基本语法参数详解2.2简单示例三、REGEXP_REPLACE函数的应用场景3.1去除特殊字符3.2统一字符串格式四、REGEXP_REPLACE与REPLACE函数的对比4.1功能差异4.2适用场景五、REGEXP_REPLACE与REGEXP函数的对比5.1功能差异5.2适用场景六、总结一、引言字符串处理是数据处理中的常见需求,Hive</div> </li> <li><a href="/article/1901472066276749312.htm" title="国产芯片替代方案:解析沁恒USB桥接芯片转四串/双串/单串口" target="_blank">国产芯片替代方案:解析沁恒USB桥接芯片转四串/双串/单串口</a> <span class="text-muted">禾川兴 13242400688</span> <a class="tag" taget="_blank" href="/search/%E6%B2%81%E6%81%92%E7%9B%B4%E6%9B%BF%E7%B3%BB%E5%88%97/1.htm">沁恒直替系列</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a><a class="tag" taget="_blank" href="/search/%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F/1.htm">桥接模式</a> <div>沁恒国产USB桥接芯片:高兼容性方案加速国产化替代随着USB通信接口在工业控制、消费电子、智能设备等领域的广泛应用,国产芯片厂商沁恒微电子(WCH)推出了一系列高性能USB转串口芯片,以高集成度、低成本、全兼容设计实现对国际品牌芯片的完美替代。本文针对沁恒多款USB桥接芯片与国际主流型号进行对比,展现其技术竞争力与国产化价值。‌一、沁恒USB桥接芯片核心优势‌‌全兼容设计‌硬件引脚定义、封装尺寸、</div> </li> <li><a href="/article/1901472066780065792.htm" title="Hive SQL 精进系列:SUBSTR 函数的多样用法" target="_blank">Hive SQL 精进系列:SUBSTR 函数的多样用法</a> <span class="text-muted">进一步有进一步的欢喜</span> <a class="tag" taget="_blank" href="/search/Hive/1.htm">Hive</a><a class="tag" taget="_blank" href="/search/SQL/1.htm">SQL</a><a class="tag" taget="_blank" href="/search/%E7%B2%BE%E8%BF%9B%E7%B3%BB%E5%88%97/1.htm">精进系列</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a> <div>目录一、引言二、SUBSTR函数基础介绍2.1基本语法2.2参数详解2.3简单示例三、SUBSTR函数常见应用场景3.1提取日期中的年份、月份或日期3.2隐藏部分敏感信息四、SUBSTR函数高级用法4.1结合条件判断动态截取4.2处理复杂字符串模式五、总结一、引言SUBSTR函数是HiveSQL中一个用于字符串截取的重要函数,在处理文本数据时发挥着关键作用。本文将全面且深入地介绍HiveSQL中S</div> </li> <li><a href="/article/1901466892409827328.htm" title="【面经】2025年软件测试面试题,精选100 道(附答案)" target="_blank">【面经】2025年软件测试面试题,精选100 道(附答案)</a> <span class="text-muted">测试界的路飞</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E9%9D%A2%E8%AF%95/1.htm">软件测试面试</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div>测试技术面试题1、我现在有个程序,发现在Windows上运行得很慢,怎么判别是程序存在问题还是软硬件系统存在问题?2、什么是兼容性测试?兼容性测试侧重哪些方面?3、测试的策略有哪些?4、正交表测试用例设计方法的特点是什么?5、描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程?6、描述测试用例设计的完整过程?7、你觉得bugzilla在使用的过程中,有什么问题?8、单元测试的</div> </li> <li><a href="/article/1901462115785437184.htm" title="代码签名证书申请指南" target="_blank">代码签名证书申请指南</a> <span class="text-muted"></span> <a class="tag" taget="_blank" href="/search/ssl%E8%AF%81%E4%B9%A6/1.htm">ssl证书</a> <div>1.什么是代码签名?代码签名是为软件、脚本或可执行文件添加数字签名的技术,用于验证开发者身份并确保代码未被篡改。签名后,用户下载时会显示“已验证发布者”,减少安全警告。2.申请前的准备工作确认需求证书类型:选择标准代码签名证书(OV)或增强型证书(EV)。OV:需企业验证,适合常规软件。EV:需严格验证,支持硬件令牌,兼容微软SmartScreen快速信任。选择证书颁发机构(CA)→代码签名证书申</div> </li> <li><a href="/article/1901461726881181696.htm" title="Ubuntu常用命令" target="_blank">Ubuntu常用命令</a> <span class="text-muted">欲登绝巘</span> <a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a> <div>以下是一些常用的Ubuntu命令,可以帮助您在终端中进行各种任务和操作:文件和目录操作:ls:列出当前目录下的文件和目录。cd:切换目录。pwd:显示当前工作目录的路径。mkdir:创建新目录。rm:删除文件或目录。cp:复制文件和目录。mv:移动文件和目录。系统信息和管理:uname-a:显示系统信息,包括内核版本和硬件架构。top:实时显示系统资源使用情况和运行进程。free:显示内存使用情况</div> </li> <li><a href="/article/1901442817276833792.htm" title="荣耀CEO赵明内网发布告别文章,正式告别荣耀和职场" target="_blank">荣耀CEO赵明内网发布告别文章,正式告别荣耀和职场</a> <span class="text-muted">国货崛起</span> <a class="tag" taget="_blank" href="/search/%E5%85%B6%E4%BB%96/1.htm">其他</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA/1.htm">智能手机</a><a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E7%A1%AC%E4%BB%B6/1.htm">智能硬件</a> <div>2025年1月17日,荣耀终端有限公司CEO赵明在内部论坛发布长文,正式宣布告别荣耀和职场。这封告别信在荣耀内部引发强烈反响,员工们纷纷留言表达不舍与祝福。赵明在信中回顾了他在荣耀的职业生涯。2015年,他从华为消费者业务CMO调任荣耀总裁,带领荣耀从互联网手机品牌发展成为全球领先的智能终端提供商。在任期间,他主导了荣耀品牌的独立运营,成功打造了荣耀Magic系列、数字系列等多款爆款产品,使荣耀在</div> </li> <li><a href="/article/27.htm" title="rust的指针作为函数返回值是直接传递,还是先销毁后创建?" target="_blank">rust的指针作为函数返回值是直接传递,还是先销毁后创建?</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/%E8%BF%94%E5%9B%9E%E5%80%BC/1.htm">返回值</a> <div> 这是我自己想到的问题,结果去知呼提问,还没等别人回答, 我自己就想到方法实验了。。 fn main() { let mut a = 34; println!("a's addr:{:p}", &a); let p = &mut a; println!("p's addr:{:p}", &a</div> </li> <li><a href="/article/154.htm" title="java编程思想 -- 数据的初始化" target="_blank">java编程思想 -- 数据的初始化</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%9A%84%E5%88%9D%E5%A7%8B%E5%8C%96/1.htm">数据的初始化</a> <div>  1.使用构造器确保数据初始化      /* *在ReckInitDemo类中创建Reck的对象 */ public class ReckInitDemo { public static void main(String[] args) { //创建Reck对象 new Reck(); } }</div> </li> <li><a href="/article/281.htm" title="[航天与宇宙]为什么发射和回收航天器有档期" target="_blank">[航天与宇宙]为什么发射和回收航天器有档期</a> <span class="text-muted">comsci</span> <div>        地球的大气层中有一个时空屏蔽层,这个层次会不定时的出现,如果该时空屏蔽层出现,那么将导致外层空间进入的任何物体被摧毁,而从地面发射到太空的飞船也将被摧毁...        所以,航天发射和飞船回收都需要等待这个时空屏蔽层消失之后,再进行 &</div> </li> <li><a href="/article/408.htm" title="linux下批量替换文件内容" target="_blank">linux下批量替换文件内容</a> <span class="text-muted">商人shang</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9B%BF%E6%8D%A2/1.htm">替换</a> <div>1、网络上现成的资料   格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`   linux sed 批量替换多个文件中的字符串   sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`   例如:替换/home下所有文件中的www.admi</div> </li> <li><a href="/article/535.htm" title="网页在线天气预报" target="_blank">网页在线天气预报</a> <span class="text-muted">oloz</span> <a class="tag" taget="_blank" href="/search/%E5%A4%A9%E6%B0%94%E9%A2%84%E6%8A%A5/1.htm">天气预报</a> <div>网页在线调用天气预报 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transit</div> </li> <li><a href="/article/662.htm" title="SpringMVC和Struts2比较" target="_blank">SpringMVC和Struts2比较</a> <span class="text-muted">杨白白</span> <a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a> <div>1. 入口 spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。 参见:http://blog.csdn.net/zs15932616453/article/details/8832343 2</div> </li> <li><a href="/article/789.htm" title="refuse copy, lazy girl!" target="_blank">refuse copy, lazy girl!</a> <span class="text-muted">小桔子</span> <a class="tag" taget="_blank" href="/search/copy/1.htm">copy</a> <div>       妹妹坐船头啊啊啊啊!都打算一点点琢磨呢。文字编辑也写了基本功能了。。今天查资料,结果查到了人家写得完完整整的。我清楚的认识到: 1.那是我自己觉得写不出的高度 2.如果直接拿来用,很快就能解决问题 3.然后就是抄咩~~ 4.肿么可以这样子,都不想写了今儿个,留着作参考吧!拒绝大抄特抄,慢慢一点点写!   </div> </li> <li><a href="/article/916.htm" title="apache与php整合" target="_blank">apache与php整合</a> <span class="text-muted">aichenglong</span> <a class="tag" taget="_blank" href="/search/php+apache+web/1.htm">php apache web</a> <div>一  apache web服务器 1 apeche web服务器的安装   1)下载Apache web服务器   2)配置域名(如果需要使用要在DNS上注册)   3)测试安装访问http://localhost/验证是否安装成功 2 apache管理   1)service.msc进行图形化管理   2)命令管理,配</div> </li> <li><a href="/article/1043.htm" title="Maven常用内置变量" target="_blank">Maven常用内置变量</a> <span class="text-muted">AILIKES</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>Built-in properties ${basedir} represents the directory containing pom.xml ${version} equivalent to ${project.version} (deprecated: ${pom.version}) Pom/Project properties Al</div> </li> <li><a href="/article/1170.htm" title="java的类和对象" target="_blank">java的类和对象</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/JAVA%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1+%E7%B1%BB+%E5%AF%B9%E8%B1%A1/1.htm">JAVA面向对象 类 对象</a> <div>java中的类:     java是面向对象的语言,解决问题的核心就是将问题看成是一个类,使用类来解决   java使用 class 类名   来创建类 ,在Java中类名要求和构造方法,Java的文件名是一样的   创建一个A类: class A{ }   java中的类:将某两个事物有联系的属性包装在一个类中,再通</div> </li> <li><a href="/article/1297.htm" title="JS控制页面输入框为只读" target="_blank">JS控制页面输入框为只读</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a> <div>在WEB应用开发当中,增、删除、改、查功能必不可少,为了减少以后维护的工作量,我们一般都只做一份页面,通过传入的参数控制其是新增、修改或者查看。而修改时需将待修改的信息从后台取到并显示出来,实际上就是查看的过程,唯一的区别是修改时,页面上所有的信息能修改,而查看页面上的信息不能修改。因此完全可以将其合并,但通过前端JS将查看页面的所有信息控制为只读,在信息量非常大时,就比较麻烦。   </div> </li> <li><a href="/article/1424.htm" title="AngularJS与服务器交互" target="_blank">AngularJS与服务器交互</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/AngularJS/1.htm">AngularJS</a><a class="tag" taget="_blank" href="/search/%24http/1.htm">$http</a> <div>        对于AJAX应用(使用XMLHttpRequests)来说,向服务器发起请求的传统方式是:获取一个XMLHttpRequest对象的引用、发起请求、读取响应、检查状态码,最后处理服务端的响应。整个过程示例如下: var xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange</div> </li> <li><a href="/article/1551.htm" title="[Maven学习笔记八]Maven常用插件应用" target="_blank">[Maven学习笔记八]Maven常用插件应用</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>常用插件及其用法位于:http://maven.apache.org/plugins/   1. Jetty server plugin 2. Dependency copy plugin 3. Surefire Test plugin 4. Uber jar plugin           1. Jetty Pl</div> </li> <li><a href="/article/1678.htm" title="【Hive六】Hive用户自定义函数(UDF)" target="_blank">【Hive六】Hive用户自定义函数(UDF)</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/%E8%87%AA%E5%AE%9A%E4%B9%89%E5%87%BD%E6%95%B0/1.htm">自定义函数</a> <div>1. 什么是Hive UDF Hive是基于Hadoop中的MapReduce,提供HQL查询的数据仓库。Hive是一个很开放的系统,很多内容都支持用户定制,包括: 文件格式:Text File,Sequence File 内存中的数据格式: Java Integer/String, Hadoop IntWritable/Text 用户提供的 map/reduce 脚本:不管什么</div> </li> <li><a href="/article/1805.htm" title="杀掉nginx进程后丢失nginx.pid,如何重新启动nginx" target="_blank">杀掉nginx进程后丢失nginx.pid,如何重新启动nginx</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+%E9%87%8D%E5%90%AF+pid%E4%B8%A2%E5%A4%B1/1.htm">nginx 重启 pid丢失</a> <div>nginx进程被意外关闭,使用nginx -s reload重启时报如下错误:nginx: [error] open() “/var/run/nginx.pid” failed (2: No such file or directory)这是因为nginx进程被杀死后pid丢失了,下一次再开启nginx -s reload时无法启动解决办法:nginx -s reload 只是用来告诉运行中的ng</div> </li> <li><a href="/article/1932.htm" title="UI设计中我们为什么需要设计动效" target="_blank">UI设计中我们为什么需要设计动效</a> <span class="text-muted">brotherlamp</span> <a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/ui%E6%95%99%E7%A8%8B/1.htm">ui教程</a><a class="tag" taget="_blank" href="/search/ui%E8%A7%86%E9%A2%91/1.htm">ui视频</a><a class="tag" taget="_blank" href="/search/ui%E8%B5%84%E6%96%99/1.htm">ui资料</a><a class="tag" taget="_blank" href="/search/ui%E8%87%AA%E5%AD%A6/1.htm">ui自学</a> <div>随着国际大品牌苹果和谷歌的引领,最近越来越多的国内公司开始关注动效设计了,越来越多的团队已经意识到动效在产品用户体验中的重要性了,更多的UI设计师们也开始投身动效设计领域。 但是说到底,我们到底为什么需要动效设计?或者说我们到底需要什么样的动效?做动效设计也有段时间了,于是尝试用一些案例,从产品本身出发来说说我所思考的动效设计。 一、加强体验舒适度 嗯,就是让用户更加爽更加爽的用你的产品。 </div> </li> <li><a href="/article/2059.htm" title="Spring中JdbcDaoSupport的DataSource注入问题" target="_blank">Spring中JdbcDaoSupport的DataSource注入问题</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>参考以下两篇文章: http://www.mkyong.com/spring/spring-jdbctemplate-jdbcdaosupport-examples/ http://stackoverflow.com/questions/4762229/spring-ldap-invoking-setter-methods-in-beans-configuration Sprin</div> </li> <li><a href="/article/2186.htm" title="数据库连接池的工作原理" target="_blank">数据库连接池的工作原理</a> <span class="text-muted">chicony</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0/1.htm">数据库连接池</a> <div>       随着信息技术的高速发展与广泛应用,数据库技术在信息技术领域中的位置越来越重要,尤其是网络应用和电子商务的迅速发展,都需要数据库技术支持动 态Web站点的运行,而传统的开发模式是:首先在主程序(如Servlet、Beans)中建立数据库连接;然后进行SQL操作,对数据库中的对象进行查 询、修改和删除等操作;最后断开数据库连接。使用这种开发模式,对</div> </li> <li><a href="/article/2313.htm" title="java 关键字" target="_blank">java 关键字</a> <span class="text-muted">CrazyMizzz</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> 关键字是事先定义的,有特别意义的标识符,有时又叫保留字。对于保留字,用户只能按照系统规定的方式使用,不能自行定义。 Java中的关键字按功能主要可以分为以下几类:    (1)访问修饰符       public,private,protected       p</div> </li> <li><a href="/article/2440.htm" title="Hive中的排序语法" target="_blank">Hive中的排序语法</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/%E6%8E%92%E5%BA%8F/1.htm">排序</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/order+by/1.htm">order by</a><a class="tag" taget="_blank" href="/search/DISTRIBUTE+BY/1.htm">DISTRIBUTE BY</a><a class="tag" taget="_blank" href="/search/sort+by/1.htm">sort by</a> <div>Hive中的排序语法 2014.06.22 ORDER BY hive中的ORDER BY语句和关系数据库中的sql语法相似。他会对查询结果做全局排序,这意味着所有的数据会传送到一个Reduce任务上,这样会导致在大数量的情况下,花费大量时间。 与数据库中 ORDER BY 的区别在于在hive.mapred.mode = strict模式下,必须指定 limit 否则执行会报错。</div> </li> <li><a href="/article/2567.htm" title="单态设计模式" target="_blank">单态设计模式</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>  单例模式(Singleton)用于为一个类生成一个唯一的对象。最常用的地方是数据库连接。 使用单例模式生成一个对象后,该对象可以被其它众多对象所使用。 <?phpclass Example{    // 保存类实例在此属性中    private static&</div> </li> <li><a href="/article/2694.htm" title="svn locked" target="_blank">svn locked</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Lock/1.htm">Lock</a> <div>post-commit hook failed (exit code 1) with output: svn: E155004: Working copy 'D:\xx\xxx' locked svn: E200031: sqlite: attempt to write a readonly database svn: E200031: sqlite: attempt to write a </div> </li> <li><a href="/article/2821.htm" title=" ARM寄存器学习" target="_blank"> ARM寄存器学习</a> <span class="text-muted">e200702084</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/F%23/1.htm">F#</a> <div>无论是学习哪一种处理器,首先需要明确的就是这种处理器的寄存器以及工作模式。     ARM有37个寄存器,其中31个通用寄存器,6个状态寄存器。 1、不分组寄存器(R0-R7)     不分组也就是说说,在所有的处理器模式下指的都时同一物理寄存器。在异常中断造成处理器模式切换时,由于不同的处理器模式使用一个名字相同的物理寄存器,就是</div> </li> <li><a href="/article/2948.htm" title="常用编码资料" target="_blank">常用编码资料</a> <span class="text-muted">gengzg</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A0%81/1.htm">编码</a> <div> List<UserInfo> list=GetUserS.GetUserList(11); String json=JSON.toJSONString(list); HashMap<Object,Object> hs=new HashMap<Object, Object>(); for(int i=0;i<10;i++) { </div> </li> <li><a href="/article/3075.htm" title="进程 vs. 线程" target="_blank">进程 vs. 线程</a> <span class="text-muted">hongtoushizi</span> <a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%9B%E7%A8%8B/1.htm">进程</a> <div>我们介绍了多进程和多线程,这是实现多任务最常用的两种方式。现在,我们来讨论一下这两种方式的优缺点。 首先,要实现多任务,通常我们会设计Master-Worker模式,Master负责分配任务,Worker负责执行任务,因此,多任务环境下,通常是一个Master,多个Worker。 如果用多进程实现Master-Worker,主进程就是Master,其他进程就是Worker。 如果用多线程实现</div> </li> <li><a href="/article/3202.htm" title="Linux定时Job:crontab -e 与 /etc/crontab 的区别" target="_blank">Linux定时Job:crontab -e 与 /etc/crontab 的区别</a> <span class="text-muted">Josh_Persistence</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/crontab/1.htm">crontab</a> <div>一、linux中的crotab中的指定的时间只有5个部分:* * * * * 分别表示:分钟,小时,日,月,星期,具体说来: 第一段 代表分钟 0—59 第二段 代表小时 0—23 第三段 代表日期 1—31 第四段 代表月份 1—12 第五段 代表星期几,0代表星期日 0—6   如: */1 * * * *   每分钟执行一次。 * </div> </li> <li><a href="/article/3329.htm" title="KMP算法详解" target="_blank">KMP算法详解</a> <span class="text-muted">hm4123660</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2/1.htm">字符串</a><a class="tag" taget="_blank" href="/search/KMP/1.htm">KMP</a> <div>     字符串模式匹配我们相信大家都有遇过,然而我们也习惯用简单匹配法(即Brute-Force算法),其基本思路就是一个个逐一对比下去,这也是我们大家熟知的方法,然而这种算法的效率并不高,但利于理解。       假设主串s="ababcabcacbab",模式串为t="</div> </li> <li><a href="/article/3456.htm" title="枚举类型的单例模式" target="_blank">枚举类型的单例模式</a> <span class="text-muted">zhb8015</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/1.htm">单例模式</a> <div>E.编写一个包含单个元素的枚举类型[极推荐]。代码如下: public enum MaYun {himself; //定义一个枚举的元素,就代表MaYun的一个实例private String anotherField;MaYun() {//MaYun诞生要做的事情//这个方法也可以去掉。将构造时候需要做的事情放在instance赋值的时候:/** himself = MaYun() {*</div> </li> <li><a href="/article/3583.htm" title="Kafka+Storm+HDFS" target="_blank">Kafka+Storm+HDFS</a> <span class="text-muted">ssydxa219</span> <a class="tag" taget="_blank" href="/search/storm/1.htm">storm</a> <div>cd /myhome/usr/stormbin/storm nimbus &amp;bin/storm supervisor &amp;bin/storm ui &amp;Kafka+Storm+HDFS整合实践kafka_2.9.2-0.8.1.1.tgzapache-storm-0.9.2-incubating.tar.gzKafka安装配置我们使用3台机器搭建Kafk</div> </li> <li><a href="/article/3710.htm" title="Java获取本地服务器的IP" target="_blank">Java获取本地服务器的IP</a> <span class="text-muted">中华好儿孙</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E8%8E%B7%E5%8F%96%E6%9C%8D%E5%8A%A1%E5%99%A8ip%E5%9C%B0%E5%9D%80/1.htm">获取服务器ip地址</a> <div> System.out.println("getRequestURL:"+request.getRequestURL()); System.out.println("getLocalAddr:"+request.getLocalAddr()); System.out.println("getLocalPort:&quo</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>