提供openssl -aes-256-cbc兼容加密/解密的简单python函数

原文链接:http://joelinoff.com/blog/?p=885

 

这里的示例显示了如何使用python以与openssl aes-256-cbc完全兼容的方式加密和解密数据。它是基于我在本网站上发布的C ++ Cipher类中所做的工作。它适用于python-2.7和python-3.x。

关键思想是基于openssl生成密钥和iv密码的数据以及它使用的“Salted__”前缀的方式。

 

因为我也掌握openssl的内部细节,所以先留着,等以后要是遇到需要了,在研究

使用方法

提供openssl -aes-256-cbc兼容加密/解密的简单python函数_第1张图片

代码:

#!/usr/bin/env python
'''
Implement openssl compatible AES-256 CBC mode encryption/decryption.

This module provides encrypt() and decrypt() functions that are compatible
with the openssl algorithms.

This is basically a python encoding of my C++ work on the Cipher class
using the Crypto.Cipher.AES class.

URL: http://projects.joelinoff.com/cipher-1.1/doxydocs/html/
'''

# LICENSE
#
# MIT Open Source
#
# Copyright (c) 2014 Joe Linoff
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

import argparse
import base64
import os
import re
import hashlib
import inspect
import sys
from getpass import getpass
from Crypto.Cipher import AES

VERSION='1.2'


# ================================================================
# debug
# ================================================================
def _debug(msg, lev=1):
    '''
    Print a debug message with some context.
    '''
    sys.stderr.write('DEBUG:{} ofp {}\n'.format(inspect.stack()[lev][2], msg))


# ================================================================
# get_key_and_iv
# ================================================================
def get_key_and_iv(password, salt, klen=32, ilen=16, msgdgst='md5'):
    '''
    Derive the key and the IV from the given password and salt.

    This is a niftier implementation than my direct transliteration of
    the C++ code although I modified to support different digests.

    CITATION: http://stackoverflow.com/questions/13907841/implement-openssl-aes-encryption-in-python

    @param password  The password to use as the seed.
    @param salt      The salt.
    @param klen      The key length.
    @param ilen      The initialization vector length.
    @param msgdgst   The message digest algorithm to use.
    '''
    # equivalent to:
    #   from hashlib import  as mdf
    #   from hashlib import md5 as mdf
    #   from hashlib import sha512 as mdf
    mdf = getattr(__import__('hashlib', fromlist=[msgdgst]), msgdgst)
    password = password.encode('ascii', 'ignore')  # convert to ASCII

    try:
        maxlen = klen + ilen
        keyiv = mdf(password + salt).digest()
        tmp = [keyiv]
        while len(tmp) < maxlen:
            tmp.append( mdf(tmp[-1] + password + salt).digest() )
            keyiv += tmp[-1]  # append the last byte
        key = keyiv[:klen]
        iv = keyiv[klen:klen+ilen]
        return key, iv
    except UnicodeDecodeError:
        return None, None


# ================================================================
# encrypt
# ================================================================
def encrypt(password, plaintext, chunkit=True, msgdgst='md5'):
    '''
    Encrypt the plaintext using the password using an openssl
    compatible encryption algorithm. It is the same as creating a file
    with plaintext contents and running openssl like this:

    $ cat plaintext
    
    $ openssl enc -e -aes-256-cbc -base64 -salt \\
        -pass pass:<password> -n plaintext

    @param password  The password.
    @param plaintext The plaintext to encrypt.
    @param chunkit   Flag that tells encrypt to split the ciphertext
                     into 64 character (MIME encoded) lines.
                     This does not affect the decrypt operation.
    @param msgdgst   The message digest algorithm.
    </span><span style="color:#800000;">'''</span><span style="color:#000000;">
    salt </span>= os.urandom(8<span style="color:#000000;">)
    key, iv </span>= get_key_and_iv(password, salt, msgdgst=<span style="color:#000000;">msgdgst)
    </span><span style="color:#0000ff;">if</span> key <span style="color:#0000ff;">is</span><span style="color:#000000;"> None:
        </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> None

    </span><span style="color:#008000;">#</span><span style="color:#008000;"> PKCS#7 padding</span>
    padding_len = 16 - (len(plaintext) % 16<span style="color:#000000;">)
    </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> isinstance(plaintext, str):
        padded_plaintext </span>= plaintext + (chr(padding_len) *<span style="color:#000000;"> padding_len)
    </span><span style="color:#0000ff;">else</span>: <span style="color:#008000;">#</span><span style="color:#008000;"> assume bytes</span>
        padded_plaintext = plaintext + (bytearray([padding_len] *<span style="color:#000000;"> padding_len))

    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Encrypt</span>
    cipher =<span style="color:#000000;"> AES.new(key, AES.MODE_CBC, iv)
    ciphertext </span>=<span style="color:#000000;"> cipher.encrypt(padded_plaintext)

    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Make openssl compatible.</span>
    <span style="color:#008000;">#</span><span style="color:#008000;"> I first discovered this when I wrote the C++ Cipher class.</span>
    <span style="color:#008000;">#</span><span style="color:#008000;"> CITATION: http://projects.joelinoff.com/cipher-1.1/doxydocs/html/</span>
    openssl_ciphertext = b<span style="color:#800000;">'</span><span style="color:#800000;">Salted__</span><span style="color:#800000;">'</span> + salt +<span style="color:#000000;"> ciphertext
    b64 </span>=<span style="color:#000000;"> base64.b64encode(openssl_ciphertext)
    </span><span style="color:#0000ff;">if</span> <span style="color:#0000ff;">not</span><span style="color:#000000;"> chunkit:
        </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> b64

    LINELEN </span>= 64<span style="color:#000000;">
    chunk </span>= <span style="color:#0000ff;">lambda</span> s: b<span style="color:#800000;">'</span><span style="color:#800000;">\n</span><span style="color:#800000;">'</span>.join(s[i:min(i+<span style="color:#000000;">LINELEN, len(s))]
                                </span><span style="color:#0000ff;">for</span> i <span style="color:#0000ff;">in</span><span style="color:#000000;"> range(0, len(s), LINELEN))
    </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> chunk(b64)


</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> decrypt</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span> decrypt(password, ciphertext, msgdgst=<span style="color:#800000;">'</span><span style="color:#800000;">md5</span><span style="color:#800000;">'</span><span style="color:#000000;">):
    </span><span style="color:#800000;">'''</span><span style="color:#800000;">
    Decrypt the ciphertext using the password using an openssl
    compatible decryption algorithm. It is the same as creating a file
    with ciphertext contents and running openssl like this:

    $ cat ciphertext
    # ENCRYPTED
    <ciphertext>
    $ egrep -v '^#|^$' | \\
        openssl enc -d -aes-256-cbc -base64 -salt -pass pass:<password> -in ciphertext
    @param password   The password.
    @param ciphertext The ciphertext to decrypt.
    @param msgdgst    The message digest algorithm.
    @returns the decrypted data.
    </span><span style="color:#800000;">'''</span>

    <span style="color:#008000;">#</span><span style="color:#008000;"> unfilter -- ignore blank lines and comments</span>
    <span style="color:#0000ff;">if</span><span style="color:#000000;"> isinstance(ciphertext, str):
        filtered </span>= <span style="color:#800000;">''</span><span style="color:#000000;">
        nl </span>= <span style="color:#800000;">'</span><span style="color:#800000;">\n</span><span style="color:#800000;">'</span><span style="color:#000000;">
        re1 </span>= r<span style="color:#800000;">'</span><span style="color:#800000;">^\s*$</span><span style="color:#800000;">'</span><span style="color:#000000;">
        re2 </span>= r<span style="color:#800000;">'</span><span style="color:#800000;">^\s*#</span><span style="color:#800000;">'</span>
    <span style="color:#0000ff;">else</span><span style="color:#000000;">:
        filtered </span>= b<span style="color:#800000;">''</span><span style="color:#000000;">
        nl </span>= b<span style="color:#800000;">'</span><span style="color:#800000;">\n</span><span style="color:#800000;">'</span><span style="color:#000000;">
        re1 </span>= b<span style="color:#800000;">'</span><span style="color:#800000;">^\\s*$</span><span style="color:#800000;">'</span><span style="color:#000000;">
        re2 </span>= b<span style="color:#800000;">'</span><span style="color:#800000;">^\\s*#</span><span style="color:#800000;">'</span>
        
    <span style="color:#0000ff;">for</span> line <span style="color:#0000ff;">in</span><span style="color:#000000;"> ciphertext.split(nl):
        line </span>=<span style="color:#000000;"> line.strip()
        </span><span style="color:#0000ff;">if</span> re.search(re1,line) <span style="color:#0000ff;">or</span><span style="color:#000000;"> re.search(re2, line):
            </span><span style="color:#0000ff;">continue</span><span style="color:#000000;">
        filtered </span>+= line +<span style="color:#000000;"> nl

    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Base64 decode</span>
    raw =<span style="color:#000000;"> base64.b64decode(filtered)
    </span><span style="color:#0000ff;">assert</span>(raw[:8] == b<span style="color:#800000;">'</span><span style="color:#800000;">Salted__</span><span style="color:#800000;">'</span><span style="color:#000000;"> )
    salt </span>= raw[8:16]  <span style="color:#008000;">#</span><span style="color:#008000;"> get the salt</span>

    <span style="color:#008000;">#</span><span style="color:#008000;"> Now create the key and iv.</span>
    key, iv = get_key_and_iv(password, salt, msgdgst=<span style="color:#000000;">msgdgst)
    </span><span style="color:#0000ff;">if</span> key <span style="color:#0000ff;">is</span><span style="color:#000000;"> None:
        </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> None

    </span><span style="color:#008000;">#</span><span style="color:#008000;"> The original ciphertext</span>
    ciphertext = raw[16<span style="color:#000000;">:]

    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Decrypt</span>
    cipher =<span style="color:#000000;"> AES.new(key, AES.MODE_CBC, iv)
    padded_plaintext </span>=<span style="color:#000000;"> cipher.decrypt(ciphertext)

    </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> isinstance(padded_plaintext, str):
        padding_len </span>= ord(padded_plaintext[-1<span style="color:#000000;">])
    </span><span style="color:#0000ff;">else</span><span style="color:#000000;">:
        padding_len </span>= padded_plaintext[-1<span style="color:#000000;">]
    plaintext </span>= padded_plaintext[:-<span style="color:#000000;">padding_len]
    </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> plaintext

</span><span style="color:#008000;">#</span><span style="color:#008000;"> include the code above ...</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> _open_ios</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> _open_ios(args):
    </span><span style="color:#800000;">'''</span><span style="color:#800000;">
    Open the IO files.
    </span><span style="color:#800000;">'''</span><span style="color:#000000;">
    ifp </span>=<span style="color:#000000;"> sys.stdin
    ofp </span>=<span style="color:#000000;"> sys.stdout

    </span><span style="color:#0000ff;">if</span> args.input <span style="color:#0000ff;">is</span> <span style="color:#0000ff;">not</span><span style="color:#000000;"> None:
        </span><span style="color:#0000ff;">try</span><span style="color:#000000;">:
            ifp </span>= open(args.input, <span style="color:#800000;">'</span><span style="color:#800000;">rb</span><span style="color:#800000;">'</span><span style="color:#000000;">)
        </span><span style="color:#0000ff;">except</span><span style="color:#000000;"> IOError:
            </span><span style="color:#0000ff;">print</span>(<span style="color:#800000;">'</span><span style="color:#800000;">ERROR: cannot read file: {}</span><span style="color:#800000;">'</span><span style="color:#000000;">.format(args.input))
            sys.exit(</span>1<span style="color:#000000;">)

    </span><span style="color:#0000ff;">if</span> args.output <span style="color:#0000ff;">is</span> <span style="color:#0000ff;">not</span><span style="color:#000000;"> None:
        </span><span style="color:#0000ff;">try</span><span style="color:#000000;">:
            ofp </span>= open(args.output, <span style="color:#800000;">'</span><span style="color:#800000;">wb</span><span style="color:#800000;">'</span><span style="color:#000000;">)
        </span><span style="color:#0000ff;">except</span><span style="color:#000000;"> IOError:
            </span><span style="color:#0000ff;">print</span>(<span style="color:#800000;">'</span><span style="color:#800000;">ERROR: cannot write file: {}</span><span style="color:#800000;">'</span><span style="color:#000000;">.format(args.output))
            sys.exit(</span>1<span style="color:#000000;">)

    </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> ifp, ofp


</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> _close_ios</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> _close_ios(ifp, ofp):
    </span><span style="color:#800000;">'''</span><span style="color:#800000;">
    Close the IO files if necessary.
    </span><span style="color:#800000;">'''</span>
    <span style="color:#0000ff;">if</span> ifp !=<span style="color:#000000;"> sys.stdin:
        ifp.close()

    </span><span style="color:#0000ff;">if</span> ofp !=<span style="color:#000000;"> sys.stdout:
        ofp.close()


</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> _write</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span> _write(ofp, out, newline=<span style="color:#000000;">False):
    </span><span style="color:#800000;">'''</span><span style="color:#800000;">
    Write out the data in the correct format.
    </span><span style="color:#800000;">'''</span>
    <span style="color:#0000ff;">if</span> ofp == sys.stdout <span style="color:#0000ff;">and</span><span style="color:#000000;"> isinstance(out, bytes):
        out </span>= out.decode(<span style="color:#800000;">'</span><span style="color:#800000;">utf-8</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">ignored</span><span style="color:#800000;">'</span><span style="color:#000000;">)
        ofp.write(out)
        </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> newline:
            ofp.write(</span><span style="color:#800000;">'</span><span style="color:#800000;">\n</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    </span><span style="color:#0000ff;">elif</span><span style="color:#000000;"> isinstance(out, str):
        ofp.write(out)
        </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> newline:
            ofp.write(</span><span style="color:#800000;">'</span><span style="color:#800000;">\n</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    </span><span style="color:#0000ff;">else</span>:  <span style="color:#008000;">#</span><span style="color:#008000;"> assume bytes</span>
<span style="color:#000000;">        ofp.write(out)
        </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> newline:
            ofp.write(b</span><span style="color:#800000;">'</span><span style="color:#800000;">\n</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    

</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> _write</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> _read(ifp):
    </span><span style="color:#800000;">'''</span><span style="color:#800000;">
    Read the data in the correct format.
    </span><span style="color:#800000;">'''</span>
    <span style="color:#0000ff;">return</span><span style="color:#000000;"> ifp.read()


</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> _runenc</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> _runenc(args):
    </span><span style="color:#800000;">'''</span><span style="color:#800000;">
    Encrypt data.
    </span><span style="color:#800000;">'''</span>
    <span style="color:#0000ff;">if</span> args.passphrase <span style="color:#0000ff;">is</span><span style="color:#000000;"> None:
        </span><span style="color:#0000ff;">while</span><span style="color:#000000;"> True:
            passphrase </span>= getpass(<span style="color:#800000;">'</span><span style="color:#800000;">Passphrase: </span><span style="color:#800000;">'</span><span style="color:#000000;">)
            tmp </span>= getpass(<span style="color:#800000;">'</span><span style="color:#800000;">Re-enter passphrase: </span><span style="color:#800000;">'</span><span style="color:#000000;">)
            </span><span style="color:#0000ff;">if</span> passphrase ==<span style="color:#000000;"> tmp:
                </span><span style="color:#0000ff;">break</span>
            <span style="color:#0000ff;">print</span>(<span style="color:#800000;">''</span><span style="color:#000000;">)
            </span><span style="color:#0000ff;">print</span>(<span style="color:#800000;">'</span><span style="color:#800000;">Passphrases do not match, please try again.</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    </span><span style="color:#0000ff;">else</span><span style="color:#000000;">:
        passphrase </span>=<span style="color:#000000;"> args.passphrase

    ifp, ofp </span>=<span style="color:#000000;"> _open_ios(args)
    text </span>=<span style="color:#000000;"> _read(ifp)
    out </span>= encrypt(passphrase, text, msgdgst=<span style="color:#000000;">args.msgdgst)
    _write(ofp, out, True)
    _close_ios(ifp, ofp)


</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> _rundec</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> _rundec(args):
    </span><span style="color:#800000;">'''</span><span style="color:#800000;">
    Decrypt data.
    </span><span style="color:#800000;">'''</span>
    <span style="color:#0000ff;">if</span> args.passphrase <span style="color:#0000ff;">is</span><span style="color:#000000;"> None:
        passphrase </span>= getpass(<span style="color:#800000;">'</span><span style="color:#800000;">Passphrase: </span><span style="color:#800000;">'</span><span style="color:#000000;">)
    </span><span style="color:#0000ff;">else</span><span style="color:#000000;">:
        passphrase </span>=<span style="color:#000000;"> args.passphrase

    ifp, ofp </span>=<span style="color:#000000;"> _open_ios(args)
    text </span>=<span style="color:#000000;"> _read(ifp)
    out </span>= decrypt(passphrase, text, msgdgst=<span style="color:#000000;">args.msgdgst)
    _write(ofp, out, False)
    _close_ios(ifp, ofp)


</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> _runtest</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> _runtest(args):
    </span><span style="color:#800000;">'''</span><span style="color:#800000;">
    Run a series of iteration where each iteration generates a random
    password from 8-32 characters and random text from 20 to 256
    characters. The encrypts and decrypts the random data. It then
    compares the results to make sure that everything works correctly.

    The test output looks like this:

    $ crypt 2000
    2000 of 2000 100.00%  15 139 2000    0
    $ #     ^    ^        ^  ^   ^       ^
    $ #     |    |        |  |   |       +-- num failed
    $ #     |    |        |  |   +---------- num passed
    $ #     |    |        |  +-------------- size of text for a test
    $ #     |    |        +----------------- size of passphrase for a test
    $ #     |    +-------------------------- percent completed
    $ #     +------------------------------- total
    # #+------------------------------------ current test

    @param args  The args parse arguments.
    </span><span style="color:#800000;">'''</span>
    <span style="color:#0000ff;">import</span><span style="color:#000000;"> string
    </span><span style="color:#0000ff;">import</span><span style="color:#000000;"> random
    </span><span style="color:#0000ff;">from</span> random <span style="color:#0000ff;">import</span><span style="color:#000000;"> randint

    </span><span style="color:#008000;">#</span><span style="color:#008000;"> Encrypt/decrypt N random sets of plaintext and passwords.</span>
    num =<span style="color:#000000;"> args.test
    ofp </span>=<span style="color:#000000;"> sys.stdout
    </span><span style="color:#0000ff;">if</span> args.output <span style="color:#0000ff;">is</span> <span style="color:#0000ff;">not</span><span style="color:#000000;"> None:
        </span><span style="color:#0000ff;">try</span><span style="color:#000000;">:
            ofp </span>= open(args.output, <span style="color:#800000;">'</span><span style="color:#800000;">w</span><span style="color:#800000;">'</span><span style="color:#000000;">)
        </span><span style="color:#0000ff;">except</span><span style="color:#000000;"> IOError:
            </span><span style="color:#0000ff;">print</span>(<span style="color:#800000;">'</span><span style="color:#800000;">ERROR: can open file for writing: {}</span><span style="color:#800000;">'</span><span style="color:#000000;">.format(args.output))
            sys.exit(</span>1<span style="color:#000000;">)

    chset </span>=<span style="color:#000000;"> string.printable
    passed </span>=<span style="color:#000000;"> 0
    failed </span>=<span style="color:#000000;"> []
    maxlen </span>=<span style="color:#000000;"> len(str(num))
    </span><span style="color:#0000ff;">for</span> i <span style="color:#0000ff;">in</span><span style="color:#000000;"> range(num):
        ran1 </span>= randint(8,32<span style="color:#000000;">)
        password </span>= <span style="color:#800000;">''</span>.join(random.choice(chset) <span style="color:#0000ff;">for</span> x <span style="color:#0000ff;">in</span><span style="color:#000000;"> range(ran1))

        ran2 </span>= randint(20, 256<span style="color:#000000;">)
        plaintext </span>= <span style="color:#800000;">''</span>.join(random.choice(chset) <span style="color:#0000ff;">for</span> x <span style="color:#0000ff;">in</span><span style="color:#000000;"> range(ran2))

        ciphertext </span>= encrypt(password, plaintext, msgdgst=<span style="color:#000000;">args.msgdgst)
        verification </span>= decrypt(password, ciphertext, msgdgst=<span style="color:#000000;">args.msgdgst)

        </span><span style="color:#0000ff;">if</span> plaintext !=<span style="color:#000000;"> verification:
            failed.append( [password, plaintext] )
        </span><span style="color:#0000ff;">else</span><span style="color:#000000;">:
            passed </span>+= 1<span style="color:#000000;">

        output </span>= <span style="color:#800000;">'</span><span style="color:#800000;">%*d of %d %6.2f%% %3d %3d %*d %*d %s</span><span style="color:#800000;">'</span> % (maxlen,i+1<span style="color:#000000;">,
                                                           num,
                                                           </span>100*(i+1)/<span style="color:#000000;">num,
                                                           len(password),
                                                           len(plaintext),
                                                           maxlen, passed,
                                                           maxlen, len(failed),
                                                           args.msgdgst)
        </span><span style="color:#0000ff;">if</span> args.output <span style="color:#0000ff;">is</span><span style="color:#000000;"> None:
            ofp.write(</span><span style="color:#800000;">'</span><span style="color:#800000;">\b</span><span style="color:#800000;">'</span>*80<span style="color:#000000;">)
            ofp.write(output)
            ofp.flush()
        </span><span style="color:#0000ff;">else</span><span style="color:#000000;">:
            ofp.write(output</span>+<span style="color:#800000;">'</span><span style="color:#800000;">\n</span><span style="color:#800000;">'</span><span style="color:#000000;">)

    ofp.write(</span><span style="color:#800000;">'</span><span style="color:#800000;">\n</span><span style="color:#800000;">'</span><span style="color:#000000;">)

    </span><span style="color:#0000ff;">if</span><span style="color:#000000;"> len(failed):
        </span><span style="color:#0000ff;">for</span> i <span style="color:#0000ff;">in</span><span style="color:#000000;"> range(len(failed)):
            ofp.write(</span><span style="color:#800000;">'</span><span style="color:#800000;">%3d %2d %-34s %3d %s\n</span><span style="color:#800000;">'</span> %<span style="color:#000000;"> (i,
                                                  len(failed[i][0]),
                                                  </span><span style="color:#800000;">'</span><span style="color:#800000;">"</span><span style="color:#800000;">'</span>+failed[i][0]+<span style="color:#800000;">'</span><span style="color:#800000;">"</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                                                  len(failed[i][</span>1<span style="color:#000000;">]),
                                                  </span><span style="color:#800000;">'</span><span style="color:#800000;">"</span><span style="color:#800000;">'</span>+failed[i][1]+<span style="color:#800000;">'</span><span style="color:#800000;">"</span><span style="color:#800000;">'</span><span style="color:#000000;">))
        ofp.write(</span><span style="color:#800000;">'</span><span style="color:#800000;">\n</span><span style="color:#800000;">'</span><span style="color:#000000;">)

    </span><span style="color:#0000ff;">if</span> args.output <span style="color:#0000ff;">is</span> <span style="color:#0000ff;">not</span><span style="color:#000000;"> None:
        ofp.close()


</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> _cli_opts</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> _cli_opts():
    </span><span style="color:#800000;">'''</span><span style="color:#800000;">
    Parse command line options.
    @returns the arguments
    </span><span style="color:#800000;">'''</span><span style="color:#000000;">
    mepath </span>= os.path.abspath(sys.argv[0]).encode(<span style="color:#800000;">'</span><span style="color:#800000;">utf-8</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    mebase </span>=<span style="color:#000000;"> os.path.basename(mepath)

    description </span>= <span style="color:#800000;">'''</span><span style="color:#800000;">
        Implements encryption/decryption that is compatible with openssl
        AES-256 CBC mode.

        You can use it as follows:

            EXAMPLE 1: {0} -> {0} (MD5)
                $ # Encrypt and decrypt using {0}.
                $ echo 'Lorem ipsum dolor sit amet' | \\
                    {0} -e -p secret | \\
                    {0} -d -p secret
                Lorem ipsum dolor sit amet

            EXAMPLE 2: {0} -> openssl (MD5)
                $ # Encrypt using {0} and decrypt using openssl.
                $ echo 'Lorem ipsum dolor sit amet' | \\
                    {0} -e -p secret | \\
                    openssl enc -d -aes-256-cbc -md md5 -base64 -salt -pass pass:secret
                Lorem ipsum dolor sit amet

            EXAMPLE 3: openssl -> {0} (MD5)
                $ # Encrypt using openssl and decrypt using {0}
                $ echo 'Lorem ipsum dolor sit amet' | \\
                    openssl enc -e -aes-256-cbc -md md5 -base64 -salt -pass pass:secret
                    {0} -d -p secret
                Lorem ipsum dolor sit amet

            EXAMPLE 4: openssl -> openssl (MD5)
                $ # Encrypt and decrypt using openssl
                $ echo 'Lorem ipsum dolor sit amet' | \\
                    openssl enc -e -aes-256-cbc -md md5 -base64 -salt -pass pass:secret
                    openssl enc -d -aes-256-cbc -md md5 -base64 -salt -pass pass:secret
                Lorem ipsum dolor sit amet

            EXAMPLE 5: {0} -> {0} (SHA512)
                $ # Encrypt and decrypt using {0}.
                $ echo 'Lorem ipsum dolor sit amet' | \\
                    {0} -e -m sha512 -p secret | \\
                    {0} -d -m sha512 -p secret
                Lorem ipsum dolor sit amet

            EXAMPLE 6: {0} -> openssl (SHA512)
                $ # Encrypt using {0} and decrypt using openssl.
                $ echo 'Lorem ipsum dolor sit amet' | \\
                    {0} -e -m sha512 -p secret | \\
                    openssl enc -d -aes-256-cbc -md sha1=512 -base64 -salt -pass pass:secret
                Lorem ipsum dolor sit amet

            EXAMPLE 7:
                $ # Run internal tests.
                $ {0} -t 2000
                2000 of 2000 100.00%%  21 104 2000    0 md5
                $ #     ^    ^        ^  ^   ^       ^ ^
                $ #     |    |        |  |   |       | +- message digest
                $ #     |    |        |  |   |       +--- num failed
                $ #     |    |        |  |   +----------- num passed
                $ #     |    |        |  +--------------- size of text for a test
                $ #     |    |        +------------------ size of passphrase for a test
                $ #     |    +--------------------------- percent completed
                $ #     +-------------------------------- total
                # #+------------------------------------- current test
</span><span style="color:#800000;">'''</span>.format(mebase.decode(<span style="color:#800000;">'</span><span style="color:#800000;">ascii</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">ignore</span><span style="color:#800000;">'</span><span style="color:#000000;">))

    parser </span>= argparse.ArgumentParser(prog=<span style="color:#000000;">mebase,
                                     formatter_class</span>=<span style="color:#000000;">argparse.RawDescriptionHelpFormatter,
                                     description</span>=<span style="color:#000000;">description,
                                     )

    group </span>= parser.add_mutually_exclusive_group(required=<span style="color:#000000;">True)
    group.add_argument(</span><span style="color:#800000;">'</span><span style="color:#800000;">-d</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">--decrypt</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                       action</span>=<span style="color:#800000;">'</span><span style="color:#800000;">store_true</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                       help</span>=<span style="color:#800000;">'</span><span style="color:#800000;">decryption mode</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    group.add_argument(</span><span style="color:#800000;">'</span><span style="color:#800000;">-e</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">--encrypt</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                       action</span>=<span style="color:#800000;">'</span><span style="color:#800000;">store_true</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                       help</span>=<span style="color:#800000;">'</span><span style="color:#800000;">encryption mode</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    parser.add_argument(</span><span style="color:#800000;">'</span><span style="color:#800000;">-i</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">--input</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        action</span>=<span style="color:#800000;">'</span><span style="color:#800000;">store</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        help</span>=<span style="color:#800000;">'</span><span style="color:#800000;">input file, default is stdin</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    parser.add_argument(</span><span style="color:#800000;">'</span><span style="color:#800000;">-m</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">--msgdgst</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        action</span>=<span style="color:#800000;">'</span><span style="color:#800000;">store</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        default</span>=<span style="color:#800000;">'</span><span style="color:#800000;">md5</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        help</span>=<span style="color:#800000;">'</span><span style="color:#800000;">message digest (md5, sha, sha1, sha256, sha512), default is md5</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    parser.add_argument(</span><span style="color:#800000;">'</span><span style="color:#800000;">-o</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">--output</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        action</span>=<span style="color:#800000;">'</span><span style="color:#800000;">store</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        help</span>=<span style="color:#800000;">'</span><span style="color:#800000;">output file, default is stdout</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    parser.add_argument(</span><span style="color:#800000;">'</span><span style="color:#800000;">-p</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">--passphrase</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        action</span>=<span style="color:#800000;">'</span><span style="color:#800000;">store</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        help</span>=<span style="color:#800000;">'</span><span style="color:#800000;">passphrase for encrypt/decrypt operations</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    group.add_argument(</span><span style="color:#800000;">'</span><span style="color:#800000;">-t</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">--test</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                       action</span>=<span style="color:#800000;">'</span><span style="color:#800000;">store</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                       default</span>=-1<span style="color:#000000;">,
                       type</span>=<span style="color:#000000;">int,
                       help</span>=<span style="color:#800000;">'</span><span style="color:#800000;">test mode (TEST is an integer)</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    parser.add_argument(</span><span style="color:#800000;">'</span><span style="color:#800000;">-v</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">--verbose</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        action</span>=<span style="color:#800000;">'</span><span style="color:#800000;">count</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        help</span>=<span style="color:#800000;">'</span><span style="color:#800000;">the level of verbosity</span><span style="color:#800000;">'</span><span style="color:#000000;">)
    parser.add_argument(</span><span style="color:#800000;">'</span><span style="color:#800000;">-V</span><span style="color:#800000;">'</span>, <span style="color:#800000;">'</span><span style="color:#800000;">--version</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        action</span>=<span style="color:#800000;">'</span><span style="color:#800000;">version</span><span style="color:#800000;">'</span><span style="color:#000000;">,
                        version</span>=<span style="color:#800000;">'</span><span style="color:#800000;">%(prog)s </span><span style="color:#800000;">'</span>+<span style="color:#000000;">VERSION)

    args </span>=<span style="color:#000000;"> parser.parse_args()
    </span><span style="color:#0000ff;">return</span><span style="color:#000000;"> args


</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> main</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">def</span><span style="color:#000000;"> main():
    args </span>=<span style="color:#000000;"> _cli_opts()
    </span><span style="color:#0000ff;">if</span> args.test ><span style="color:#000000;"> 0:
        </span><span style="color:#0000ff;">if</span> args.input <span style="color:#0000ff;">is</span> <span style="color:#0000ff;">not</span><span style="color:#000000;"> None:
            </span><span style="color:#0000ff;">print</span>(<span style="color:#800000;">'</span><span style="color:#800000;">WARNING: input argument will be ignored.</span><span style="color:#800000;">'</span><span style="color:#000000;">)
        </span><span style="color:#0000ff;">if</span> args.passphrase <span style="color:#0000ff;">is</span> <span style="color:#0000ff;">not</span><span style="color:#000000;"> None:
            </span><span style="color:#0000ff;">print</span>(<span style="color:#800000;">'</span><span style="color:#800000;">WARNING: passphrase argument will be ignored.</span><span style="color:#800000;">'</span><span style="color:#000000;">)
        _runtest(args)
    </span><span style="color:#0000ff;">elif</span><span style="color:#000000;"> args.encrypt:
        _runenc(args)
    </span><span style="color:#0000ff;">elif</span><span style="color:#000000;"> args.decrypt:
        _rundec(args)


</span><span style="color:#008000;">#</span><span style="color:#008000;"> ================================================================</span><span style="color:#008000;">
#</span><span style="color:#008000;"> MAIN</span><span style="color:#008000;">
#</span><span style="color:#008000;"> ================================================================</span>
<span style="color:#0000ff;">if</span> <span style="color:#800080;">__name__</span> == <span style="color:#800000;">"</span><span style="color:#800000;">__main__</span><span style="color:#800000;">"</span><span style="color:#000000;">:
    main()</span></pre> 
    </div> 
    <span class="cnblogs_code_collapse">View Code</span> 
   </div> 
   <p> </p> 
  </div> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1304717771254304768"></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">你可能感兴趣的:(提供openssl -aes-256-cbc兼容加密/解密的简单python函数)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1892533283338645504.htm"
                           title="深入浅出:基于SpringBoot和JWT的后端鉴权系统设计与实现" target="_blank">深入浅出:基于SpringBoot和JWT的后端鉴权系统设计与实现</a>
                        <span class="text-muted">Vcats</span>
<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/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>文章目录什么是鉴权系统定义与作用主要组成部分工作原理常用技术和框架基于SpringBoot+JWT的鉴权系统设计与实现指南前言技术对比令牌技术JWT令牌实现全流程1.**依赖引入**2.**JWT工具类**3.**JWT拦截器(Interceptor)**4.**拦截器注册**5.**登录接口**什么是鉴权系统后端开发鉴权系统是一种用于验证和授权用户访问后端资源的系统,在保障系统安全和资源合理访问</div>
                    </li>
                    <li><a href="/article/1892532653761032192.htm"
                           title="CSS flex布局 列表单个元素点击 本行下插入详情独占一行" target="_blank">CSS flex布局 列表单个元素点击 本行下插入详情独占一行</a>
                        <span class="text-muted">Cxiaomu</span>
<a class="tag" taget="_blank" href="/search/CSS3/1.htm">CSS3</a><a class="tag" taget="_blank" href="/search/UI%E8%AE%BE%E8%AE%A1/1.htm">UI设计</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>技术栈:Vue2+javaScript简介在实际开发过程中有遇到一个场景:一个list,每行个数固定,点击单个元素后,在当前行与下一行之间插入一行元素详情,便于更直观的查看到对应的数据详情。这种情形,在移动端比较常见,比如用户列表,点击单个列表展示详情,可以考虑flex布局+positionrelative定位。实现思路对于需求重点和实现拆解列表元素:for遍历每行固定(3)个元素:flex布局、</div>
                    </li>
                    <li><a href="/article/1892532149689577472.htm"
                           title="短剧系统源码上线三端小程序需要什么资质上线周期是多久?" target="_blank">短剧系统源码上线三端小程序需要什么资质上线周期是多久?</a>
                        <span class="text-muted">南阳迈特网络科技</span>
<a class="tag" taget="_blank" href="/search/%E7%9F%AD%E5%89%A7%E6%BA%90%E7%A0%81/1.htm">短剧源码</a><a class="tag" taget="_blank" href="/search/%E7%9F%AD%E5%89%A7%E7%B1%BB%E7%9B%AE/1.htm">短剧类目</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a>
                        <div>短剧系统部署上线需要哪些资质呢?近年来,随着移动互联网的迅猛发展和用户内容消费习惯的改变,短剧作为一种新兴的内容形式,正迅速崛起并受到广泛关注。短剧以其短小精悍、节奏紧凑、题材多样化的特点,吸引了大量年轻观众的喜爱。无论是在通勤路上、午休时间,还是临睡前,短剧都成为了人们碎片化时间娱乐的首选。运营短剧类小程序首先需要注册申请开放平台账号,小程序备案、类目申请等等......抖音小程序《营业执照》《</div>
                    </li>
                    <li><a href="/article/1892531897473495040.htm"
                           title="20个高级Java开发面试题及答案!" target="_blank">20个高级Java开发面试题及答案!</a>
                        <span class="text-muted">Java进阶八股文</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</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/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</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>
                        <div>1、java中都有哪些引用类型?(1)强引用Java中默认声明的就是强引用,比如:Objectobj=newObject();obj=null;只要强引用存在,垃圾回收器将永远不会回收被引用的对象。如果想被回收,可以将对象置为null;(2)软引用(SoftReference)在内存足够的时候,软引用不会被回收,只有在内存不足时,系统才会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,</div>
                    </li>
                    <li><a href="/article/1892531896454279168.htm"
                           title="《沙雕传奇》手游官网:爆笑冒险,传奇之旅等你开启!" target="_blank">《沙雕传奇》手游官网:爆笑冒险,传奇之旅等你开启!</a>
                        <span class="text-muted">林舟Jie</span>
<a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F/1.htm">游戏</a><a class="tag" taget="_blank" href="/search/%E6%89%8B%E6%B8%B8%E6%B8%B8%E6%88%8F/1.htm">手游游戏</a><a class="tag" taget="_blank" href="/search/%E4%BC%A0%E5%A5%87%E6%B8%B8%E6%88%8F/1.htm">传奇游戏</a>
                        <div>沙雕传奇手游官网:https://sdcq.qn185.com沙雕传奇手游官网《沙雕传奇》手游作为一款以“爆笑冒险”为主打的游戏,听起来就充满了趣味性和创意。以下是一些建议,帮助玩家更好地体验这款游戏:一、游戏初探与角色创建官网注册与下载:首先,前往《沙雕传奇》手游官网进行注册和下载。确保下载的是官方正版游戏,以避免遇到安全问题或盗版内容。角色创建:在创建角色时,可以根据自己的喜好选择性别、职业和</div>
                    </li>
                    <li><a href="/article/1892531390109511680.htm"
                           title="Shopro商城新零售多商户社交电商分销商城系统支持微信公众号、微信小程序、H5、APP" target="_blank">Shopro商城新零售多商户社交电商分销商城系统支持微信公众号、微信小程序、H5、APP</a>
                        <span class="text-muted">狂团商城小师妹</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%9A%E7%BA%B3miui52086/1.htm">博纳miui52086</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%B9%B3%E5%8F%B0/1.htm">微信公众平台</a>
                        <div>新零售解决方案重新建立消费者、货物、经营场所三者之间的联系。线上线下联合发力,以消费者体验为核心,全面布局新零售会员管理更便捷规范管理会员信息一目了然,可自动生成会员消费标签,帮助您制定个性化会员营销方案提高会员粘性将会员资源转化为订单。商城管理更省心规范管理会员信息一目了然,可自动生成会员消费标签,帮助您制定个性化会员营销方案提高会员粘性将会员资源转化为订单。社交电商解决方案社交电商已成为线上购</div>
                    </li>
                    <li><a href="/article/1892531391170670592.htm"
                           title="同城拼车打车约车系统:Java源码全开源构建与优化" target="_blank">同城拼车打车约车系统:Java源码全开源构建与优化</a>
                        <span class="text-muted">狂团商城小师妹</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%9A%E7%BA%B3miui52086/1.htm">博纳miui52086</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%B9%B3%E5%8F%B0/1.htm">微信公众平台</a>
                        <div>同城拼车系统是一个复杂且功能全面的软件系统,它巧妙地运用互联网技术,将具有相同出行需求的乘客与车主进行精准匹配,旨在实现资源的最大化共享、显著降低出行成本、有效缓解交通拥堵问题,并大幅提升出行效率。Java,作为一种功能强大、应用广泛的编程语言,凭借其出色的跨平台性、丰富的API库以及强大的性能,成为开发此类系统的理想选择。一、Java源码构建系统架构MVC架构:同城拼车系统采用MVC(Model</div>
                    </li>
                    <li><a href="/article/1892531392466710528.htm"
                           title="活动报名系统源码:JAVA同城服务系统活动报名同城圈子商家商城城市代理躲猫猫" target="_blank">活动报名系统源码:JAVA同城服务系统活动报名同城圈子商家商城城市代理躲猫猫</a>
                        <span class="text-muted">狂团商城小师妹</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%9A%E7%BA%B3miui52086/1.htm">博纳miui52086</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</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/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%B9%B3%E5%8F%B0/1.htm">微信公众平台</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a>
                        <div>JAVA同城服务系统:打造多元化社交与娱乐新体验在数字化时代,同城服务系统已成为连接城市生活的重要桥梁。我们精心打造的JAVA同城服务系统,不仅融合了活动报名、同城圈子、商家商城、城市代理等多重功能,还特别加入了创新的“躲猫猫”游戏模块,旨在为用户提供一个集社交、娱乐、消费于一体的综合性平台。以下是对该系统功能的详细介绍及技术栈分析。功能介绍活动报名用户可以通过系统轻松浏览并参与同城各类精彩活动,</div>
                    </li>
                    <li><a href="/article/1892531009493200896.htm"
                           title="PTA:使用指针方式求一个给定的m×n矩阵各行元素之和" target="_blank">PTA:使用指针方式求一个给定的m×n矩阵各行元素之和</a>
                        <span class="text-muted">WZMeiei</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/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                        <div>本题要求编写程序,使用指针方式求一个给定的m×n矩阵各行元素之和。(例如:scanf("%d",*(matrix+i)+j);//使用指针方式访问二维数组元素)输入格式:输入第一行给出两个正整数m和n(1intmain(){intm,n;scanf("%d%d",&m,&n);intmatrix[6][6];//使用指针方式输入矩阵元素for(inti=0;i<m;i++){for(intj=0;</div>
                    </li>
                    <li><a href="/article/1892531010596302848.htm"
                           title="PTA:使用指针进行字符串排序" target="_blank">PTA:使用指针进行字符串排序</a>
                        <span class="text-muted">WZMeiei</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/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                        <div>使用指针方法输入3个字符串,将它们按从小到大的顺序输出。输入格式:在一行中给出3个长度为n字符串。(1≤n≤1000)输出格式:在一行中,输出3个从小到大排序的字符串。输入样例:在这里给出一组输入。例如:332211输出样例:在这里给出相应的输出。例如:112233代码#include#include#defineMAX_LEN1001intmain(){charstr1[MAX_LEN],str</div>
                    </li>
                    <li><a href="/article/1892531011888148480.htm"
                           title="同步&异步日志系统-日志落地模块的实现" target="_blank">同步&异步日志系统-日志落地模块的实现</a>
                        <span class="text-muted">2401_82609762</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a>
                        <div>功能:将格式化完成后的日志消息字符串,输出到指定的位置扩展:支持同时将日志落地到不同的位置位置分类:1.标准输出2.指定文件(时候进行日志分析)3.滚动文件(文件按照时间/大小进行滚动切换)扩展:支持落地方向的扩展用户可以自己编写一个新的落地模块,将日志进行其他方向的落地。实现思想1.抽象出一个落地基类2.之后根据落地方向从基类派生出不同落地方向的子类3.使用工厂模式进行创建与表示分离标准输出cl</div>
                    </li>
                    <li><a href="/article/1892530756757024768.htm"
                           title="Java如何调用构造函数和方法以及使用" target="_blank">Java如何调用构造函数和方法以及使用</a>
                        <span class="text-muted">WZMeiei</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>调用构造函数的格式构造函数在创建新对象时被调用。调用格式如下:ClassNameobjectName=newClassName(parameters);ClassName:你需要创建其实例的类的名称。objectName:你将创建的对象的名称。parameters:如果你使用的是带有参数的构造函数,这里需要传递相应的参数。示例:Personperson=newPerson("John",25);调</div>
                    </li>
                    <li><a href="/article/1892530757285507072.htm"
                           title="Java中的static关键字" target="_blank">Java中的static关键字</a>
                        <span class="text-muted">WZMeiei</span>
<a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>static是Java中的一个关键字,主要用于修饰类成员(变量和方法),以表示这个成员属于类本身,而不是类的实例1.静态变量(StaticVariables)类级属性:静态变量也称为类变量或静态属性,它们在类加载时初始化,并且只有一份拷贝,被所有该类的对象共享。这意味着无论创建多少个对象,静态变量的内存空间只有一处。生命周期长:静态变量的生命周期与类相同,只要应用运行,它们就存在。访问方式:可以直</div>
                    </li>
                    <li><a href="/article/1892530504545136640.htm"
                           title="使用vue3框架vue-next-admin导出表格excel(带图片)" target="_blank">使用vue3框架vue-next-admin导出表格excel(带图片)</a>
                        <span class="text-muted">乐多_L</span>
<a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>想要使用vue3导出表格内容并且图片显示在表格中(如图):步骤如下:下载安装插件:安装命令:npminstalljs-table2excel引入插件:importtable2excelfrom'js-table2excel'使用插件直接上代码:onBatchExport方法中数据的key值要与data中保持一致,否则数据无法获取到,打印出的结果就回为undefined。我写了两种导出:一种是全部导</div>
                    </li>
                    <li><a href="/article/1892529998733045760.htm"
                           title="axios" target="_blank">axios</a>
                        <span class="text-muted">是小傲雨呀^_^</span>
<a class="tag" taget="_blank" href="/search/axios/1.htm">axios</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>1.简介:Axios是一个基于Promise的现代化HTTP客户端库,广泛用于浏览器和Node.js环境中发送HTTP请求。它的设计目标是简化前后端数据交互,提供更高效、更易用的API。2.Axios的核心作用发送HTTP请求支持所有常见请求方法(GET、POST、PUT、DELETE等),并自动处理请求参数和响应数据。拦截请求和响应可以在请求发送前或响应返回后添加统一的处理逻辑(例如添加认证To</div>
                    </li>
                    <li><a href="/article/1892529999513186304.htm"
                           title="AJAX使用和固定格式" target="_blank">AJAX使用和固定格式</a>
                        <span class="text-muted">乐多_L</span>
<a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>ajax的全称AsynchronousJavaScriptandXML(异步JavaScript和XML)。ajax是一种创建交互式网页应用的网页开发技术。其中最核心的依赖是浏览器提供的XMLHttpRequest对象,是这个对象使得浏览器可以发出HTTP请求与接收HTTP响应。实现了在页面不刷新的情况下和服务器进行交互。方法描述newXMLHttpRequest()生成一个XMLHttpRequ</div>
                    </li>
                    <li><a href="/article/1892530000586928128.htm"
                           title="JavaScript的内置对象有哪些?" target="_blank">JavaScript的内置对象有哪些?</a>
                        <span class="text-muted">乐多_L</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</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/ecmascript/1.htm">ecmascript</a>
                        <div>一、内置对象1、概念JavaScript中的对象共分为3种:自定义对象、浏览器对象和内置对象。之前我们自己创建的对象都属于自定义对象,而内置对象又称为API,是指JavaScript语言自己封装的一些对象,用来提供一些常用的基本功能,来帮助我们提高开发速度,例如:数学-Math、日期-Date、数组-Array、字符串-String等等。JavaScript的内置对象很多,我们不可能都记住,所以我</div>
                    </li>
                    <li><a href="/article/1892529746508574720.htm"
                           title="基于java新闻管理系统,推荐一款开源cms内容管理系统ruoyi-fast-cms" target="_blank">基于java新闻管理系统,推荐一款开源cms内容管理系统ruoyi-fast-cms</a>
                        <span class="text-muted">xnqys</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/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>
                        <div>一、项目概述1.1项目背景在信息高速流通的当下,新闻媒体行业每天都要处理和传播海量信息。传统的新闻管理模式依赖人工操作,在新闻采集、编辑、发布以及后续管理等环节中,不仅效率低下,而且容易出现人为失误。同时,面对用户日益多样化的信息获取需求,传统方式也难以实现个性化、精准化的内容推送。而Java语言凭借其跨平台性、安全性、稳定性以及丰富的类库和强大的开发框架,成为开发新闻管理系统的理想选择。通过基于</div>
                    </li>
                    <li><a href="/article/1892529368161382400.htm"
                           title="YOLOv8到YOLOv11:深度解析目标检测架构的演进" target="_blank">YOLOv8到YOLOv11:深度解析目标检测架构的演进</a>
                        <span class="text-muted">金外飞176</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E6%9C%AF%E5%89%8D%E6%B2%BF/1.htm">技术前沿</a><a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E8%B7%9F%E8%B8%AA/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><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/1.htm">目标检测</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</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/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a>
                        <div>YOLOv8到YOLOv11:深度解析目标检测架构的演进在计算机视觉领域,YOLO(YouOnlyLookOnce)系列模型一直是实时目标检测领域的佼佼者。从2015年的YOLOv1到2024年的YOLOv11,这一系列模型经历了快速的迭代和发展,不断刷新着目标检测的性能和效率。然而,由于部分YOLO版本缺乏详细的学术论文和架构图,研究人员和开发者在理解这些模型的工作原理时往往面临挑战。最近,一篇</div>
                    </li>
                    <li><a href="/article/1892528737774268416.htm"
                           title="lombok在高版本idea中注解不生效的解决" target="_blank">lombok在高版本idea中注解不生效的解决</a>
                        <span class="text-muted">L_!!!</span>
<a class="tag" taget="_blank" href="/search/springboot/1.htm">springboot</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>环境:IntelliJIDEA2024.3.1.1+SpringBoot+Maven问题描述使用@AllArgsConstructor注解一个用户类,然后调用全参构造方法创建对象,出现错误:java:无法将类com.itheima.pojo.User中的构造器User应用到给定类型; 需要:没有参数 找到:  java.lang.Integer,java.lang.String,java.lang</div>
                    </li>
                    <li><a href="/article/1892528359695511552.htm"
                           title="详细介绍:封装简易的 Axios 函数获取省份列表" target="_blank">详细介绍:封装简易的 Axios 函数获取省份列表</a>
                        <span class="text-muted">还是鼠鼠</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vscode/1.htm">vscode</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a>
                        <div>目录关键步骤:完整代码(html):代码解析:程序运行结果:本示例展示了如何通过封装一个简易的myAxios函数来模拟axios的功能,使用原生的XMLHttpRequest(XHR)对象来发起HTTP请求。我们将实现一个简单的功能,通过该封装函数从服务器获取省份列表数据,并在网页上显示这些省份。关键步骤:封装myAxios函数:myAxios函数接收一个配置对象(如请求的URL和方法),并返回一</div>
                    </li>
                    <li><a href="/article/1892528356222627840.htm"
                           title="挪车小程序挪车二维码php+uniapp" target="_blank">挪车小程序挪车二维码php+uniapp</a>
                        <span class="text-muted">狂团商城小师妹</span>
<a class="tag" taget="_blank" href="/search/%E5%8D%9A%E7%BA%B3miui52086/1.htm">博纳miui52086</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%B9%B3%E5%8F%B0/1.htm">微信公众平台</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">微信小程序</a><a class="tag" taget="_blank" href="/search/uni-app/1.htm">uni-app</a><a class="tag" taget="_blank" href="/search/%E5%B0%8F%E7%A8%8B%E5%BA%8F/1.htm">小程序</a>
                        <div>一款基于FastAdmin+ThinkPHP开发的匿名通知车主挪车微信小程序,采用匿名通话的方式,用户只能在有效期内拨打车主电话,过期失效,从而保护车主和用户隐私。提供微信小程序端和服务端源码,支持私有化部署。更新日志V1.0.4小程序UI重新设计,全面升级1.小程序UI全面升级,布局更加合理,去除冗余元素,界面更加干净、清爽,让您专注于核心内容。2.增加隐私通话开关,在后台自由切换。3.整体优化</div>
                    </li>
                    <li><a href="/article/1892528229797916672.htm"
                           title="使用vue3框架vue-next-admin导出列表数据" target="_blank">使用vue3框架vue-next-admin导出列表数据</a>
                        <span class="text-muted">乐多_L</span>
<a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>在Vue3中实现Excel导出功能可以通过以下步骤完成,这里使用xlsx库来实现前端Excel导出:1.安装依赖npminstallxlsxfile-saver#或yarnaddxlsxfile-saver2.实现代码示例需要在当前页引入import*asXLSXfrom"xlsx";注释:我导出的数据为列表的全部数据(datum);自定义我需要的表头,大家可以根据自己的需要进行替换。还可以只导出</div>
                    </li>
                    <li><a href="/article/1892527096467615744.htm"
                           title="探索AI音乐创作的未来:八款顶尖AI音乐生成工具(本期介绍国外-国内另外专题介绍)" target="_blank">探索AI音乐创作的未来:八款顶尖AI音乐生成工具(本期介绍国外-国内另外专题介绍)</a>
                        <span class="text-muted">带娃的IT创业者</span>
<a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98%E5%88%9B%E5%AF%8C/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><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a>
                        <div>探索AI音乐创作的未来:八款顶尖AI音乐生成工具(本期介绍国外-国内另外专题介绍)在科技飞速发展的今天,人工智能(AI)已经渗透到我们生活的方方面面,其中音乐创作也不例外。AI音乐生成工具不仅为专业音乐人提供了新的创作方式,也让普通人能够轻松创作出高质量的音乐作品。本文将介绍八款知名的AI音乐生成工具,帮助你了解它们的特点和优势。1.SunoSuno是一款AI驱动的音乐生成器,能够快速创建高质量的</div>
                    </li>
                    <li><a href="/article/1892526340897304576.htm"
                           title="《JavaScript高级程序设计》——第四章:变量、作用域与内存管理" target="_blank">《JavaScript高级程序设计》——第四章:变量、作用域与内存管理</a>
                        <span class="text-muted">dorabighead</span>
<a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</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/ecmascript/1.htm">ecmascript</a>
                        <div>《JavaScript高级程序设计》——第四章:变量、作用域与内存管理大家好!我是小哆啦,欢迎回到《JavaScript高级程序设计》的读书笔记大本营!在这章中,我们要聊的是两个让人头疼又迷人的话题——变量、作用域与内存管理。有些人一提到这些,就会感到一阵头晕目眩,恍若置身一场JavaScript版的迷宫大冒险!但今天,小哆啦会带你们轻松过关,深入了解这些概念,并且保持足够的幽默感,让你既能笑着学</div>
                    </li>
                    <li><a href="/article/1892526214493564928.htm"
                           title="国内那么多的低代码平台,究竟哪家比较强?" target="_blank">国内那么多的低代码平台,究竟哪家比较强?</a>
                        <span class="text-muted">有颜有货</span>
<a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0/1.htm">低代码平台</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81%E5%B9%B3%E5%8F%B0/1.htm">低代码平台</a>
                        <div>国内低代码平台哪家强?本人摸索低代码5年多,体验过几十家低代码平台,下面通过2张功能对比图,3K字内容详细告诉你:国内低代码到底哪家强。如果你觉得我的分析对你有一定帮助,还请点赞收藏支持一下,争取能让更多人看到并帮助需要的人。话不多说,先上图。国内主流低代码产品功能对比。(图二在回答末尾)一、织信Informat(企业级低代码平台)功能清单驱动方式:模型驱动字段支持:35种字段,同时支持通过js脚</div>
                    </li>
                    <li><a href="/article/1892525332959916032.htm"
                           title="mysql 最大连接数超时_MySQL连接数过大导致连接超时的问题" target="_blank">mysql 最大连接数超时_MySQL连接数过大导致连接超时的问题</a>
                        <span class="text-muted">你认识小鲍鱼吗</span>
<a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%9C%80%E5%A4%A7%E8%BF%9E%E6%8E%A5%E6%95%B0%E8%B6%85%E6%97%B6/1.htm">最大连接数超时</a>
                        <div>春节访问量激增,负载压力很大,程序处理较慢,然后就调整项目中的线程池和数据库连接数。可是还是没有太好的提高,追根溯源,发现数据库连接受到限制。虽然是做了读写分离,但是还是没抗住高峰。所以会有报错:“MySQL:ERROR1040:Toomanyconnections”。查看最大连接数上限,默认的是151mysql>showvariableslike'max_connections';+------</div>
                    </li>
                    <li><a href="/article/1892524954830827520.htm"
                           title="手机对小孩的影响及应对措施探究" target="_blank">手机对小孩的影响及应对措施探究</a>
                        <span class="text-muted">China_Mr_Huang</span>
<a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA/1.htm">智能手机</a>
                        <div>在信息技术日新月异的当下,手机早已超脱了单纯通讯工具的范畴,深度融入现代生活的每一处细节,成为人们日常生活中不可或缺的存在。对于正处于身心快速发展关键阶段的小孩而言,手机犹如一把双刃剑,一方面为他们打开了知识的宝库,提供了便捷获取信息、拓展视野的渠道,另一方面,也在不知不觉中埋下了诸多潜在风险的隐患。因此,深入且全面地剖析手机对小孩成长所产生的影响,并探寻切实可行、行之有效的应对举措,无疑具有极其</div>
                    </li>
                    <li><a href="/article/1892524576919842816.htm"
                           title="【架构】分层架构 (Layered Architecture)" target="_blank">【架构】分层架构 (Layered Architecture)</a>
                        <span class="text-muted">_君莫笑</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%9E%B6%E6%9E%84/1.htm">软件架构</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>一、分层模型基础理论![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/0365cf0bfa754229bdedca6b472bffc7.png1.核心定义分层架构(LayeredArchitecture)模型是一种常见的软件设计架构,它将软件系统按照功能划分为不同的层次,每个层次都有特定的职责和功能,层与层之间存在清晰的依赖关系。这种架构有助于提高软件的可</div>
                    </li>
                    <li><a href="/article/1892524450474160128.htm"
                           title="深入理解DAG任务调度系统:核心原理与实现" target="_blank">深入理解DAG任务调度系统:核心原理与实现</a>
                        <span class="text-muted">AI天才研究院</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97/1.htm">计算</a><a class="tag" taget="_blank" href="/search/Python%E5%AE%9E%E6%88%98/1.htm">Python实战</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E5%AE%9E%E8%B7%B5/1.htm">编程实践</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/dag/1.htm">dag</a>
                        <div>1.背景介绍随着大数据、人工智能等领域的发展,任务调度系统的重要性日益凸显。DirectedAcyclicGraph(DAG)任务调度系统是一种常见的任务调度系统,它可以有效地解决多个依赖关系复杂的任务调度问题。本文将深入探讨DAG任务调度系统的核心原理和实现,为读者提供一个深入的理解。1.1背景介绍1.1.1任务调度系统简介任务调度系统是计算机科学中一个重要的研究领域,它主要关注于在并行计算系统</div>
                    </li>
                                <li><a href="/article/118.htm"
                                       title="异常的核心类Throwable" target="_blank">异常的核心类Throwable</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%BA%90%E7%A0%81/1.htm">源码</a><a class="tag" taget="_blank" href="/search/%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86/1.htm">异常处理</a><a class="tag" taget="_blank" href="/search/exception/1.htm">exception</a>
                                    <div>java异常的核心是Throwable,其他的如Error和Exception都是继承的这个类 里面有个核心参数是detailMessage,记录异常信息,getMessage核心方法,获取这个参数的值,我们可以自己定义自己的异常类,去继承这个Exception就可以了,方法基本上,用父类的构造方法就OK,所以这么看异常是不是很easy 
 
 
 
package com.natsu;


</div>
                                </li>
                                <li><a href="/article/245.htm"
                                       title="mongoDB 游标(cursor) 实现分页 迭代" target="_blank">mongoDB 游标(cursor) 实现分页 迭代</a>
                                    <span class="text-muted">开窍的石头</span>
<a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a>
                                    <div>上篇中我们讲了mongoDB 中的查询函数,现在我们讲mongo中如何做分页查询 
 
&nbsp;&nbsp;&nbsp;&nbsp; 如何声明一个游标 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var mycursor = db.user.find({_id:{$lte:5}}); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 迭代显示游标数</div>
                                </li>
                                <li><a href="/article/372.htm"
                                       title="MySQL数据库INNODB 表损坏修复处理过程" target="_blank">MySQL数据库INNODB 表损坏修复处理过程</a>
                                    <span class="text-muted">0624chenhong</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a>
                                    <div>最近mysql数据库经常死掉,用命令net stop mysql命令也无法停掉,关闭Tomcat的时候,出现Waiting for N instance(s) to be deallocated 信息。查了下,大概就是程序没有对数据库连接释放,导致Connection泄露了。因为用的是开元集成的平台,内部程序也不可能一下子给改掉的,就验证一下咯。启动Tomcat,用户登录系统,用netstat -</div>
                                </li>
                                <li><a href="/article/499.htm"
                                       title="剖析如何与设计人员沟通" target="_blank">剖析如何与设计人员沟通</a>
                                    <span class="text-muted">不懂事的小屁孩</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a>
                                    <div>最近做图烦死了,不停的改图,改图……。烦,倒不是因为改,而是反反复复的改,人都会死。很多需求人员不知该如何与设计人员沟通,不明白如何使设计人员知道他所要的效果,结果只能是沟通变成了扯淡,改图变成了应付。 
 
那应该如何与设计人员沟通呢? 
 
我认为设计人员与需求人员先天就存在语言障碍。对一个合格的设计人员来说,整天玩的都是点、线、面、配色,哪种构图看起来协调;哪种配色看起来合理心里跟明镜似的,</div>
                                </li>
                                <li><a href="/article/626.htm"
                                       title="qq空间刷评论工具" target="_blank">qq空间刷评论工具</a>
                                    <span class="text-muted">换个号韩国红果果</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a>
                                    <div>

var a=document.getElementsByClassName('textinput');
					var b=[];
					for(var m=0;m&lt;a.length;m++){
						if(a[m].getAttribute('placeholder')!=null)
							b.push(a[m])
					}
					var l</div>
                                </li>
                                <li><a href="/article/753.htm"
                                       title="S2SH整合之session" target="_blank">S2SH整合之session</a>
                                    <span class="text-muted">灵静志远</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/session/1.htm">session</a>
                                    <div>错误信息: 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cartService': Scope 'session' is not active for the current thread; consider defining a scoped</div>
                                </li>
                                <li><a href="/article/880.htm"
                                       title="xmp标签" target="_blank">xmp标签</a>
                                    <span class="text-muted">a-john</span>
<a class="tag" taget="_blank" href="/search/%E6%A0%87%E7%AD%BE/1.htm">标签</a>
                                    <div>今天在处理数据的显示上遇到一个问题: 
var html = '&lt;li&gt;&lt;div class=&quot;pl-nr&quot;&gt;&lt;span class=&quot;user-name&quot;&gt;' + user
           + '&lt;/span&gt;' + text + '&lt;/div&gt;&lt;/li&gt;';
ulComme</div>
                                </li>
                                <li><a href="/article/1007.htm"
                                       title="Ajax的常用技巧(2)---实现Web页面中的级联菜单" target="_blank">Ajax的常用技巧(2)---实现Web页面中的级联菜单</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a>
                                    <div>在网络上显示数据,往往只显示数据中的一部分信息,如文章标题,产品名称等。如果浏览器要查看所有信息,只需点击相关链接即可。在web技术中,可以采用级联菜单完成上述操作。根据用户的选择,动态展开,并显示出对应选项子菜单的内容。 在传统的web实现方式中,一般是在页面初始化时动态获取到服务端数据库中对应的所有子菜单中的信息,放置到页面中对应的位置,然后再结合CSS层叠样式表动态控制对应子菜单的显示或者隐</div>
                                </li>
                                <li><a href="/article/1134.htm"
                                       title="天-安-门,好高" target="_blank">天-安-门,好高</a>
                                    <span class="text-muted">atongyeye</span>
<a class="tag" taget="_blank" href="/search/%E6%83%85%E6%84%9F/1.htm">情感</a>
                                    <div>&nbsp;&nbsp;&nbsp; 我是85后,北漂一族,之前房租1100,因为租房合同到期,再续,房租就要涨150。最近网上新闻,地铁也要涨价。算了一下,涨价之后,每次坐地铁由原来2块变成6块。仅坐地铁费用,一个月就要涨200。内心苦痛。 
 
&nbsp;&nbsp;&nbsp; 晚上躺在床上一个人想了很久,很久。 
&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp; 我生在农</div>
                                </li>
                                <li><a href="/article/1261.htm"
                                       title="android 动画" target="_blank">android 动画</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E9%80%8F%E6%98%8E%E5%BA%A6/1.htm">透明度</a><a class="tag" taget="_blank" href="/search/%E5%B9%B3%E7%A7%BB/1.htm">平移</a><a class="tag" taget="_blank" href="/search/%E7%BC%A9%E6%94%BE/1.htm">缩放</a><a class="tag" taget="_blank" href="/search/%E6%97%8B%E8%BD%AC/1.htm">旋转</a>
                                    <div>android的动画有两种 &nbsp;tween动画和Frame动画 
&nbsp; 
tween动画;,透明度,缩放,旋转,平移效果 
&nbsp; 
Animation &nbsp; 动画 
AlphaAnimation 渐变透明度 
RotateAnimation 画面旋转 
ScaleAnimation 渐变尺寸缩放 
TranslateAnimation 位置移动 
Animation</div>
                                </li>
                                <li><a href="/article/1388.htm"
                                       title="查看本机网络信息的cmd脚本" target="_blank">查看本机网络信息的cmd脚本</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a>
                                    <div>@echo 您的用户名是:%USERDOMAIN%\%username%&gt;&quot;%userprofile%\网络参数.txt&quot;
@echo 您的机器名是:%COMPUTERNAME%&gt;&gt;&quot;%userprofile%\网络参数.txt&quot;
@echo ___________________&gt;&gt;&quot;%userprofile%\</div>
                                </li>
                                <li><a href="/article/1515.htm"
                                       title="plsql 清除登录过的用户" target="_blank">plsql 清除登录过的用户</a>
                                    <span class="text-muted">征客丶</span>
<a class="tag" taget="_blank" href="/search/plsql/1.htm">plsql</a>
                                    <div>tools---preferences----logon history---history&nbsp; 把你想要删除的删除 
 
 
-------------------------------------------------------------------- 
若有其他凝问或文中有错误,请及时向我指出, 
我好及时改正,同时也让我们一起进步。 
email : binary_spac</div>
                                </li>
                                <li><a href="/article/1642.htm"
                                       title="【Pig一】Pig入门" target="_blank">【Pig一】Pig入门</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/pig/1.htm">pig</a>
                                    <div>Pig安装 
1.下载pig 
&nbsp; 
wget http://mirror.bit.edu.cn/apache/pig/pig-0.14.0/pig-0.14.0.tar.gz 
&nbsp; 
2. 解压配置环境变量 
&nbsp; 
&nbsp;&nbsp; 如果Pig使用Map/Reduce模式,那么需要在环境变量中,配置HADOOP_HOME环境变量 
&nbsp; 
expor</div>
                                </li>
                                <li><a href="/article/1769.htm"
                                       title="Java 线程同步几种方式" target="_blank">Java 线程同步几种方式</a>
                                    <span class="text-muted">BlueSkator</span>
<a class="tag" taget="_blank" href="/search/volatile/1.htm">volatile</a><a class="tag" taget="_blank" href="/search/synchronized/1.htm">synchronized</a><a class="tag" taget="_blank" href="/search/ThredLocal/1.htm">ThredLocal</a><a class="tag" taget="_blank" href="/search/ReenTranLock/1.htm">ReenTranLock</a><a class="tag" taget="_blank" href="/search/Concurrent/1.htm">Concurrent</a>
                                    <div>为何要使用同步?&nbsp;  &nbsp; &nbsp; java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查),&nbsp;   &nbsp; &nbsp; 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用,&nbsp;   &nbsp; &nbsp; 从而保证了该变量的唯一性和准确性。    1.同步方法&</div>
                                </li>
                                <li><a href="/article/1896.htm"
                                       title="StringUtils判断字符串是否为空的方法(转帖)" target="_blank">StringUtils判断字符串是否为空的方法(转帖)</a>
                                    <span class="text-muted">BreakingBad</span>
<a class="tag" taget="_blank" href="/search/null/1.htm">null</a><a class="tag" taget="_blank" href="/search/StringUtils/1.htm">StringUtils</a><a class="tag" taget="_blank" href="/search/%E2%80%9C%E2%80%9D/1.htm">“”</a>
                                    <div>转帖地址:http://www.cnblogs.com/shangxiaofei/p/4313111.html 
&nbsp; 
public&nbsp;static&nbsp;boolean&nbsp;isEmpty(String str)  &nbsp;   
  判断某字符串是否为空,为空的标准是 str== 
null&nbsp; 
或 str.length()== 
0   &nbsp;</div>
                                </li>
                                <li><a href="/article/2023.htm"
                                       title="编程之美-分层遍历二叉树" target="_blank">编程之美-分层遍历二叉树</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/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a>
                                    <div>

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class LevelTraverseBinaryTree {

    /**
     * 编程之美 分层遍历二叉树
     * 之前已经用队列实现过二叉树的层次遍历,但这次要求输出换行,因此要</div>
                                </li>
                                <li><a href="/article/2150.htm"
                                       title="jquery取值和ajax提交复习记录" target="_blank">jquery取值和ajax提交复习记录</a>
                                    <span class="text-muted">chengxuyuancsdn</span>
<a class="tag" taget="_blank" href="/search/jquery%E5%8F%96%E5%80%BC/1.htm">jquery取值</a><a class="tag" taget="_blank" href="/search/ajax%E6%8F%90%E4%BA%A4/1.htm">ajax提交</a>
                                    <div>
// 取值
	// alert($(&quot;input[name='username']&quot;).val());
	// alert($(&quot;input[name='password']&quot;).val());
	// alert($(&quot;input[name='sex']:checked&quot;).val());
	// alert($(&quot</div>
                                </li>
                                <li><a href="/article/2277.htm"
                                       title="推荐国产工作流引擎嵌入式公式语法解析器-IK Expression" target="_blank">推荐国产工作流引擎嵌入式公式语法解析器-IK Expression</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BA%94%E7%94%A8%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">应用服务器</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/Excel/1.htm">Excel</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F/1.htm">嵌入式</a>
                                    <div>这个开源软件包是国内的一位高手自行研制开发的,正如他所说的一样,我觉得它可以使一个工作流引擎上一个台阶。。。。。。欢迎大家使用,并提出意见和建议。。。 
----------转帖--------------------------------------------------- 
 IK Expression是一个开源的(OpenSource),可扩展的(Extensible),基于java语言</div>
                                </li>
                                <li><a href="/article/2404.htm"
                                       title="关于系统中使用多个PropertyPlaceholderConfigurer的配置及PropertyOverrideConfigurer" target="_blank">关于系统中使用多个PropertyPlaceholderConfigurer的配置及PropertyOverrideConfigurer</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>1、PropertyPlaceholderConfigurer 
Spring中PropertyPlaceholderConfigurer这个类,它是用来解析Java Properties属性文件值,并提供在spring配置期间替换使用属性值。接下来让我们逐渐的深入其配置。 
 
基本的使用方法是:(1) 
 
&lt;bean id=&quot;propertyConfigurerForWZ&q</div>
                                </li>
                                <li><a href="/article/2531.htm"
                                       title="二叉树:二叉搜索树" target="_blank">二叉树:二叉搜索树</a>
                                    <span class="text-muted">dieslrae</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%8C%E5%8F%89%E6%A0%91/1.htm">二叉树</a>
                                    <div>&nbsp;&nbsp;&nbsp; 所谓二叉树,就是一个节点最多只能有两个子节点,而二叉搜索树就是一个经典并简单的二叉树.规则是一个节点的左子节点一定比自己小,右子节点一定大于等于自己(当然也可以反过来).在树基本平衡的时候插入,搜索和删除速度都很快,时间复杂度为O(logN).但是,如果插入的是有序的数据,那效率就会变成O(N),在这个时候,树其实变成了一个链表. 
 
tree代码: 
 
</div>
                                </li>
                                <li><a href="/article/2658.htm"
                                       title="C语言字符串函数大全" target="_blank">C语言字符串函数大全</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/function/1.htm">function</a>
                                    <div>C语言字符串函数大全 
&nbsp; 
&nbsp; 
函数名: stpcpy 
功&nbsp;能: 拷贝一个字符串到另一个 
用&nbsp;法: char *stpcpy(char *destin, char *source); 
程序例: 
&nbsp; 
#include &lt;stdio.h&gt; 
#include &lt;string.h&gt; 
&nbsp; 
int main</div>
                                </li>
                                <li><a href="/article/2785.htm"
                                       title="友盟统计页面技巧" target="_blank">友盟统计页面技巧</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E6%8A%80%E5%B7%A7/1.htm">技巧</a>
                                    <div>在基类调用就可以了, 基类ViewController示例代码 
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [MobClick beginLogPageView:[NSString stringWithFormat:@&quot;%@&quot;,self.class]];
</div>
                                </li>
                                <li><a href="/article/2912.htm"
                                       title="window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法" target="_blank">window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法</a>
                                    <span class="text-muted">flyvszhb</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a>
                                    <div>window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法 
 
本机已经安装了jdk1.7,而比较早期的项目需要依赖jdk1.6,于是同时在本机安装了jdk1.6和jdk1.7. 
 安装jdk1.6前,执行java -version得到 
C:\Users\liuxiang2&gt;java -version 
java version &quot;1.7.0_21&quo</div>
                                </li>
                                <li><a href="/article/3039.htm"
                                       title="Java在创建子类对象的同时会不会创建父类对象" target="_blank">Java在创建子类对象的同时会不会创建父类对象</a>
                                    <span class="text-muted">happyqing</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%88%9B%E5%BB%BA/1.htm">创建</a><a class="tag" taget="_blank" href="/search/%E5%AD%90%E7%B1%BB%E5%AF%B9%E8%B1%A1/1.htm">子类对象</a><a class="tag" taget="_blank" href="/search/%E7%88%B6%E7%B1%BB%E5%AF%B9%E8%B1%A1/1.htm">父类对象</a>
                                    <div>&nbsp; 
1.在thingking in java 的第四版第六章中明确的说了,子类对象中封装了父类对象, 
&nbsp; 
2.&quot;When you create an object of the derived class, it contains within it a subobject of the base class. This subobject is the sam</div>
                                </li>
                                <li><a href="/article/3166.htm"
                                       title="跟我学spring3 目录贴及电子书下载" target="_blank">跟我学spring3 目录贴及电子书下载</a>
                                    <span class="text-muted">jinnianshilongnian</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a>
                                    <div>&nbsp; 
&nbsp; 一、《跟我学spring3》电子书下载地址: 
《跟我学spring3》 &nbsp;(1-7 和&nbsp;8-13)&nbsp;http://jinnianshilongnian.iteye.com/blog/pdf&nbsp;&nbsp; 
&nbsp; 
跟我学spring3系列 word原版 下载 
&nbsp; 
&nbsp; 二、
源代码下载  
最新依</div>
                                </li>
                                <li><a href="/article/3420.htm"
                                       title="第12章 Ajax(上)" target="_blank">第12章 Ajax(上)</a>
                                    <span class="text-muted">onestopweb</span>
<a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a>
                                    <div>index.html 
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/</div>
                                </li>
                                <li><a href="/article/3547.htm"
                                       title="BI and EIM 4.0 at a glance" target="_blank">BI and EIM 4.0 at a glance</a>
                                    <span class="text-muted">blueoxygen</span>
<a class="tag" taget="_blank" href="/search/BO/1.htm">BO</a>
                                    <div>http://www.sap.com/corporate-en/press.epx?PressID=14787 
&nbsp; 
有机会研究下EIM家族的两个新产品~~~~ 
&nbsp; 
New features of the 4.0 releases of BI and EIM solutions include:  
 
  Real-time in-memory computing – </div>
                                </li>
                                <li><a href="/article/3674.htm"
                                       title="Java线程中yield与join方法的区别" target="_blank">Java线程中yield与join方法的区别</a>
                                    <span class="text-muted">tomcat_oracle</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>长期以来,多线程问题颇为受到面试官的青睐。虽然我个人认为我们当中很少有人能真正获得机会开发复杂的多线程应用(在过去的七年中,我得到了一个机会),但是理解多线程对增加你的信心很有用。之前,我讨论了一个wait()和sleep()方法区别的问题,这一次,我将会讨论join()和yield()方法的区别。坦白的说,实际上我并没有用过其中任何一个方法,所以,如果你感觉有不恰当的地方,请提出讨论。 
&nb</div>
                                </li>
                                <li><a href="/article/3801.htm"
                                       title="android Manifest.xml选项" target="_blank">android Manifest.xml选项</a>
                                    <span class="text-muted">阿尔萨斯</span>
<a class="tag" taget="_blank" href="/search/Manifest/1.htm">Manifest</a>
                                    <div>结构 
继承关系 
public final class Manifest extends Objectjava.lang.Objectandroid.Manifest 
内部类 
 
 
 class Manifest.permission权限 
 class Manifest.permission_group权限组 
 构造函数 
 
public Manifest () 详细  androi</div>
                                </li>
                                <li><a href="/article/3928.htm"
                                       title="Oracle实现类split函数的方" target="_blank">Oracle实现类split函数的方</a>
                                    <span class="text-muted">zhaoshijie</span>
<a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a>
                                    <div>关键字:Oracle实现类split函数的方 
项目里需要保存结构数据,批量传到后他进行保存,为了减小数据量,子集拼装的格式,使用存储过程进行保存。保存的过程中需要对数据解析。但是oracle没有Java中split类似的函数。从网上找了一个,也补全了一下。 
 
CREATE OR REPLACE TYPE t_split_100 IS TABLE OF VARCHAR2(100); 
 
cr</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>