1. Welches Netzwerkprotokoll verwendet Nginx?
Nginx ist von unten nach oben die Transportschicht und die Anwendungsschicht ist für die Planung verantwortlich Prozesse
2. echo 'hello tusheng' ?> )
Möglicherweise ist short_open_tag auf dem Server nicht aktiviert = Auf Aus gesetzt, php.ini aktiviert den Short-Tag-Steuerungsparameter: short_open_tag = Ein
3 Beschreiben Sie kurz die Ausgabeergebnisse des folgenden Programms und erklären Sie kurz, warum , und wie kann man ein solches Problem lösen?
$tmp == "a"? Ergebnis 1, verursacht durch int- und string-Typ-Zwang, 0==="a"
0 == 0 muss wahr sein
PHP ist ein schwacher Typ. .
$tmp = 0 === "a"? 1: 2;
echo $tmp; Es ist bekannt, dass eine Zeichenfolge wie folgt lautet: $str = "1109063 milo 1 ";
Verwenden Sie eine Codezeile, um 1109063 in der Zeichenfolge $uid, milo $user und 1 $type zuzuweisen
Die Leerzeichen lauten wie folgt
list($uid, $user, $ type) = explosion( " ", $str);
t ist wie folgt:
list($uid, $user, $type) = explosion("t", $str); uid, $user, $type ) = sscanf($str, "%d %s %d");
$n = sscanf($auth, "%dt%s %s", $id, $first, $last);
5. Listen Sie die folgenden Arten von vorzeichenbehafteten bzw. vorzeichenlosen Bereichen auf: TINYINT SMALLINT MEDIUMINT INT
TINYINT-2^7 - 2^7-10 ~ 2^8-1
SMALLINT-2 ^15 - 2^15 -1 0 ~ 2^16-1
MEDIUMINT-2^23 - 2^23-1 0 ~ 2^24-1
INT-2^31 - 2^31-1 0 ~ 2^32- 1
6. Fügen Sie das folgende Array in einer Zeile zusammen: i am milo! ', 'AM' , 'MILO!', 'DAY', 'DAY', 'UP!' );
7. Rufen Sie die folgende Funktion auf, um die Funktion und den Wert von count abzurufen
function get_list($cnd = array(), &$count = false)
{
// Pseudocode-Verarbeitung $cnd und Zuweisung von Daten
$datas = 'i am call back';
$count && $count = rand(1, 10000);
}
?> ;
$count=1;
$data = get_list($cnd,&$count);
echo $count; Beschreiben Sie kurz die Vorteile des Sitzungsmechanismus. Mysql, Memcache und Cookie behalten einen eindeutigen Statusidentifikationscode bei. 9. Mögliche Gründe für die folgenden HTTP-Statuscodes und wie man damit umgeht. 404, 502, 503
200
Die Anfrage war erfolgreich und der von der Anfrage erwartete Antwortheader oder Datenkörper wird mit dieser Antwort zurückgegeben.
301
Die angeforderte Ressource wurde dauerhaft an einen neuen Speicherort verschoben und alle zukünftigen Verweise auf diese Ressource sollten einen von mehreren in dieser Antwort zurückgegebenen URIs verwenden. Wenn möglich, sollten Clients mit Linkbearbeitungsfunktionen die angeforderte Adresse automatisch in die vom Server zurückgegebene Adresse ändern. Sofern nicht anders angegeben, ist diese Antwort auch zwischenspeicherbar. Der neue persistente URI sollte im Feld „Location“ der Antwort zurückgegeben werden. Sofern es sich nicht um eine HEAD-Anfrage handelt, sollte die Antwortentität einen Hyperlink zum neuen URI und eine kurze Beschreibung enthalten. Wenn es sich nicht um eine GET- oder HEAD-Anfrage handelt, verbietet der Browser die automatische Umleitung, sofern dies nicht vom Benutzer bestätigt wird, da sich die Bedingungen der Anfrage entsprechend ändern können. Hinweis: Bei einigen Browsern, die das HTTP/1.0-Protokoll verwenden, wird die nachfolgende Umleitungsanforderung zu einer GET-Methode, wenn die von ihnen gesendete POST-Anfrage eine 301-Antwort erhält.
404
Die Anfrage ist fehlgeschlagen. Die angeforderte Ressource wurde nicht auf dem Server gefunden. Es gibt keine Informationen darüber, ob der Zustand vorübergehend oder dauerhaft ist. Wenn der Server die Situation kennt, sollte er den Statuscode 410 verwenden, um ihn darüber zu informieren, dass die alte Ressource aufgrund einiger Probleme mit dem internen Konfigurationsmechanismus dauerhaft nicht verfügbar ist und keine Sprungadresse vorhanden ist. Der Statuscode 404 wird häufig verwendet, wenn der Server nicht preisgeben möchte, warum die Anfrage abgelehnt wurde oder keine andere geeignete Antwort verfügbar ist.
502
Als ein Server, der als Gateway oder Proxy fungierte, versuchte, eine Anfrage auszuführen, erhielt er eine ungültige Antwort vom Upstream-Server.
503
Aufgrund vorübergehender Serverwartung oder Überlastung kann der Server die Anfrage derzeit nicht verarbeiten. Dieser Zustand ist vorübergehend und wird nach einiger Zeit wiederhergestellt. Wenn mit einer Verzögerung zu rechnen ist, kann die Antwort einen Retry-After-Header enthalten, um die Verzögerung anzuzeigen. Wenn diese Retry-After-Nachricht nicht gegeben wird, SOLLTE der Client sie genauso behandeln wie eine 500-Antwort. Hinweis: Das Vorhandensein des Statuscodes 503 bedeutet nicht, dass der Server ihn verwenden muss, wenn er überlastet ist. Einige Server möchten einfach Verbindungen von Clients verweigern.
200 OK Alles ist normal und es folgen die Antwortdokumente für GET- und POST-Anfragen.
301 Permanent verschoben Das vom Client angeforderte Dokument befindet sich an einer anderen Stelle. Der Browser sollte automatisch auf die neue URL zugreifen.
Nicht gefunden. Die Ressource wurde am angegebenen Speicherort nicht gefunden. Dies ist auch eine häufige Reaktion.
502 Bad Gateway Wenn der Server als Gateway oder Proxy fungiert, greift er auf den nächsten Server zu, um die Anfrage abzuschließen, der Server gibt jedoch eine ungültige Antwort zurück.
503 Dienst nicht verfügbar Der Server konnte aufgrund von Wartungsarbeiten oder Überlastung nicht antworten. Beispielsweise kann ein Servlet 503 zurückgeben, wenn der Datenbankverbindungspool voll ist. Der Server kann einen Retry-After-Header bereitstellen, wenn er 503 zurückgibt.
10. Es gibt die folgende Datenbank. Verwenden Sie die ursprüngliche MySQL-Erweiterung, um eine Verbindung herzustellen und die ersten zehn Zeilen der Benutzertabelle abzufragen.
Host: 192.168.0.254
Port: 3306
Benutzer: eins
pass: Piece
Datenbank: db_user
Tabelle: Benutzer
$link = mysql_connect("192.168.0.254:3306","one","piece") or die('Konnte keine Verbindung herstellen: '. mysql_error()) ;
mysql_select_db('db_user',$link);
$query = mysql_query("select * from user limit 10");
while($rs = mysql_fetch_array($query,MYSQL_ASSOC ))
{}
11. Verwenden Sie autoload($class), um das automatische Laden von Klassen im Lib-Verzeichnis zu realisieren und mit Unterverzeichnissen kompatibel zu sein
$request->action = lcfirst(implode(array_map(
'ucfirst' ,
explode('-', strtolower($request->action))
))); ----------- ------------------------- -
function __autoload($class)
{
$cls = strtolower(str_replace("_","/",$class)); .php'))
{
include_once(LIB.$cls.'.php');
}
else
{
die("nicht gefundene {$class}-Klasse ");
}
}
definiert("LIB",'/data/wwwroot/www.xx.com/lib/');
$author = new Lib_Author();
---------- ------------------------- -----------
function __authload($class)
{
$cls = explosion("_",$class); [1]))
{
if(@is_file($cls[2]))
{
include_once("CON_PATH".$cls[1].'/'.$cls[ 2]..php");
}
else
{
dir('error');
}
else if(@is_file($cls [1].".php"))
{
include_once("CON_PATH".$cls[1].".php");
}
else
{
dir('error');
}
}
-------------------------------- -------
function __autoload ($class)
{
$cls = explosion("_",$class);
$file = get_file($cls); >if($file=='error')
{
die('error');
}
include_once($file);
}
function get_file($dir )
{
if(is_array( $dir))
{
foreach($dir as $k=>$v)
{
$tmpdir .= $v. '/';
if(is_dir('CON_PATH'.$tmpdir))
{
continue();
}
else if(is_file('CON_PATH'.$tmpdir." .php"))
{
return 'CON_PATH'.$tmpdir.".php";
}
else
{
return 'error';
}
}
return 'error'; cntroller/");
$sb = new controller_sb();
--------------------------------------------- ---------
function __autoload_my_classes($ classname)
{
# ... Ihre Logik, um Klassen hier einzuschließen
}
spl_autoload_register('__autoload_my_classes');
------------ ----------------------------------- ----------
12. Verwenden Sie set_error_handle, um Fehler zu erfassen und auszugeben. Die Ebene bestimmen Sie selbst.
set_error_handle(callback,level)
function callback(int $errno, string $errstr [, string $errfile [, int $errline [, array $errcontext ]] ] ){
}
function dealErrorHandler($errno,$errstr,$errfile,$errline)
{
switch($errno){
case E_USER_ERROR:
echo „Fehler [$errno] $errstr schwerwiegender Fehler in Zeile $errline in Datei $errfile“;
case E_USER_WARNING:
echo „meine Warnung [$errno] $errstr“:
break; 🎜>echo "unbekannter Fehlertyp:[$errno] $errstr";
}
set_erro_handler(dealErrorHandler);
trigger_error("notice", E_USER_NOTICE); 🎜>trigger_error("warning", E_USER_WARNING);
trigger_error("error" , E_USER_ERROR);
13. Beschreiben Sie kurz zwei Methoden zum Abschirmen von Hinweiswarnungen von PHP-Programmen.
Variablen initialisieren und die Fehlerstufe festlegen am Anfang der Datei oder ändern Sie php.ini, um error_reporting
festzulegenset_error_handler und @suppresserrors
1. Fügen Sie hinzu: error_reporting (E_ALL & ~E_NOTICE); error_reporting(0); oder ändern Sie php.inidisplay_errors=Off
14. Die Rolle des Entwurfsmusters wird häufig im
Einzelfallmodus verwendet, es werden jedoch auch andere Modi verwendet
15 wird binär ausgedrückt und der Berechnungsprozess wird kurz beschrieben
10-2
1023%2=1
511%2 =1
255%2 =1
127%2 =1
63%2 =1
31%2 =1
15%2 =1
7%2 =1
3%2 =1
1%2 =1
0 =0
---------------- ---------- --
1023
2^9=
k=9
10 9 8 7 6 5 4 3 2 1
1 1 1 1 1 1 1 1 1 1
------------------------------------
1023 1
1023 -1/2=511 1
511-1/2=255 1
255-1/2=127 1
127-1/2=63 1
63-1/2=31 1
31-1/2= 15 1
15-1/2=7 1
7-1/2=3 1
3-1/2=1 1
-- ------------------------- -------------------
2-10
Verwenden Sie einfach die Binärzahl. Die Zahlen in jeder Ziffer von , beginnend ganz rechts, wird die erste Zahl rechts mit zwei hoch null multipliziert, die zweite Zahl wird mit zwei hoch hoch multipliziert, Die dritte Zahl wird mit der Quadratzahl von zwei multipliziert, und so weiter. Analog können Sie die n-te Zahl mit zwei hoch multiplizieren (n-1) und dann die Ergebnisse addieren : 110011=1*2^0 1*2^1 0*2^2 0*2^3 1*2^4 1*2^5=51
Dies kann auch als Formel angesehen werden, die An ist *2^(n-1) An stellt die n-te Zahl dar, beginnend auf der rechten Seite der Binärzahl.
Berechnen Sie den ersten, zweiten, dritten und n-ten Term mit der Formel An*2^(n-1) und addieren Sie sie zusammen
16. Was ist die Ausgabe des folgenden PHP-Programms? c) = explosion('t', $str);
echo $a,$b,$c; Nach der Explosion handelt es sich also um ein Array (0=>"aatbbtcc"). . . , 't' wird abgeschnitten, wenn es durch "t" ersetzt wird.
17. Welche Fehlerstufen umfassen bzw. erfordern eine Rückgabe?
include gibt eine Systemwarnung aus und setzt die Ausführung fort, require gibt eine Systemwarnung aus, verursacht jedoch einen schwerwiegenden Fehler und beenden Sie das Skript.
18. Es gibt eine vorhandene Funktion mit einer unsicheren Anzahl von Parametern (vielleicht 5 oder 50), wie man diese Funktion definiert
Methode 1: Ohne Verwendung der in PHP integrierten Funktionen
Methode 2: prompt func_num_args() func_get_arg() unc_get_args()
function param()
{
$numargs = func_num_args();
echo "Anzahl der Argumente: $numargs
n" ;
if ($numargs >= 2) {
echo "Zweites Argument ist: " . func_get_arg(1) . "
n";
}
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i ) {
echo "Argument $i ist: " . $arg_list[$i] "< ;br /> ;n";
}
}
param(1,2,3,4,5);
/**
2 * Nachdem ich mit dem Schreiben des Beispiels fertig war, dachte ich, es sei fertig, aber ich traf jemanden, der nach call_user_func_array() fragte und das Handbuch las
3 * Es stellte sich heraus, dass die oben beschriebene Testfunktion vereinfacht werden kann folgendes Beispiel,
4*/
5 function otest1 ( $a)
6 {
7 echo( 'a parameter' );
8 }
9
10 function otest2 ( $a,$b)
11 {
12 echo( 'Zwei Parameter' );
13 }
14
15 function otest3 ( $a,$b,$c)
16 {
17 echo( 'Three' );
18 }
19
20 function otest ()
21 {
22 $args=func_get_args();
23 $num=func_num_args();
24 call_user_func_array( ' otest'.$num,$args );
25 }
26
27 otest(1,2>19); , und seinen Wert ändern, verwenden Sie zwei Methoden zur Implementierung (global und reference&)
$var=1;
function get_pra()
{
global $var = 'xxx ';
echo $var;}
echo $var.'--'; ----------
$test = 1;
$test1 = 2;
function get_yinyong ()
{
global $test1;
$GLOBALS["test"] = &$test1;}
get_yinyong(); echo $test;
--------------
Wir stoßen oft auf 10 Stück der Daten aus der Benutzertabelle zur Anzeige. Beschreiben Sie kurz, wie Sie diese Funktion implementieren. SQL-Anweisungen können nicht verwendet werden:
Tabelle Benutzerfelder
Schätzen Sie das Intervall in einer Benutzertabelle, um eine Zufallszahl in diesem Intervall zu erhalten. Wenn die SQL-Anweisung größer oder kleiner als diese ID ist, begrenzen Sie Dutzende von Daten (garantiert 10 Daten). Die Shuffle-Funktion der abgerufenen Daten wird unterbrochen. Array_rand nimmt dann 10
21 heraus. Angenommen, die UID in der folgenden SQL-Anweisung kann den spezifischen Wert erhalten, wie lautet die Reihenfolge der UID nach der Abfrage der folgenden Anweisung? So sortieren Sie nach der Reihenfolge der eingegebenen UID.
Wählen Sie die UID vom Benutzer aus, wobei die UID in(10, 1, 3, 8, 11, 4, 7) ist.
Das beeindruckende Ergebnis ist 1,3,4, 7,8,10,11 in aufsteigender Reihenfolge, es gibt eine besondere Situation, ich bin mir einfach nicht sicher, da einige der IDs in der Mitte möglicherweise nicht in aufsteigender Reihenfolge sind, wenn sie direkt manuell geändert werden, wenn Sie die Reihenfolge neu erstellen müssen von uid in, holen Sie sich den Wert im Abfrageergebnis-Array basierend auf der ID und fügen Sie ihn in ein neues Array ein
22. Verwenden Sie PHP. Ersetzen Sie Buchstaben in einer Zeichenfolge durch **
preg_replace('/[a-zA- Z]*/','**',$str);
Wenn das angegebene Zeichen verwendet wird, str_replace(' ooxx','**',$str);
23 in 2.php unten? Warum gibt es ein Problem mit der Ausführungssequenz 1.php->2.php
Cookie, Cookie-Zeit time() 3600
24. Beschreiben Sie kurz die häufig verwendeten JSON-Codierungsfunktionen , wie man beim Dekodieren von JSON ein Array zurückgibt
25 Wenn die SQL-Anweisung Wörter wie „/“ enthält, muss jeder Teil der SQL-Anweisung sein, was mit einem bestimmten Wert zu tun ist
mysql_real_escape_string
26. So legen Sie Header-Informationen in PHP fest
header(''); Es gibt mehrere Skripte wie folgt, bitte teilen Sie mir die Ausgabe von 2.php mit setcookie('test', 'cookie_test', 3600);
?>
2.php
$cookie = isset($_COOKIE[ 'test'])? $_COOKIE['test']:
echo $cookie;> Wenn include oder include_once nicht in einer Funktion oder Methode aufgerufen wird, sind die Ausgabeergebnisse dieselben.
b. Wenn include oder include_once in einer Funktion oder Methode aufgerufen wird, müssen Sie include anstelle von include_once verwenden.
28. Beschreiben Sie kurz die Funktion von call_user_func.
Rufen Sie eine Funktion oder eine Funktion in einer Klasse auf und geben Sie den Wert des ersten Parameters zurück. Ähnliche Funktion call_user_func_array
29. Der Zugriff geht davon aus, dass Nginx Servername www.120.net xxx.120.net
Zugriff auf http://www.120.net/index.php und http://xxx konfiguriert wurde 120.net/index.php
Was sind $_SERVER["SERVER_NAME"] bzw. $_SERVER["REQUEST_URI"]
www.120.net xxx.120.net
/index.php / index .php
30. Das Attribut einer Datei unter Linux ist drwxr-xr-x. Die Verzeichnisberechtigungen sind 755. Der Eigentümer u hat Lese-, Schreib- und Änderungsberechtigungen gehört zu g, das über Lese- und Änderungsberechtigungen verfügt. Personen außerhalb der Gruppe haben Lese- und Änderungsberechtigungen
31. Was ist die theoretische Download-Geschwindigkeit von 1 Mbit/s Breitband in KBit/s, die Berechnungsmethode
1*1024/8
1M=1024KB
1KB=1024B
1B=8bit
Teil 2
1. Einfache Implementierung einer abstrakten Klasse für ein Singleton-Factory-Designmuster{ // Die parametrisierte Factory-Methode öffentliche statische Funktionsfabrik ($type) { if (include_once 'Drivers /' . $type . '.php') {
$classname = 'Driver_' } else {
Neue Ausnahme auslösen („Treiber nicht gefunden“);
}
}// Einen MySQL-Treiber laden$mysql = Beispiel::factory('MySQL');
// Einen SQLite-Treiber laden
$sqlite = Beispiel::factory ('SQLite');
definded('DRIVER','/data/wwwroot/www.want.com/core/driver/'); private function __construct() { } public static functionfactory($type) { if(include_once(DRIVER.$type.'.php')) { return exampleSon::singleton($type); } else { throw new Exception(" Der Treiber wurde nicht gefunden! ) { echo 'Ich bin konstruiert'; } // Die Singleton-Methode public static function singleton() { if (!isset(self::$instance)) { //Wenn keine statische private Klasseninstanz festgelegt ist, erstelle sie $c = __CLASS__; // Klassennamen abrufen self::$instance = new $c } // Beispielmethode public function bark() { echo 'Woof!'; die öffentliche Instanzfunktion __clone() //Nicht zulässig Clone { trigger_error('Klonen ist nicht zulässig.', E_USER_ERROR}} Schlüsselwörter:
1 Private statische Mitgliedsvariable
2 __CLASS__ Holen Sie sich die aktuelle Klasse Name
3 Holen Sie sich die öffentliche statische Methode Singleton
4 Überschreiben Sie die __clone()-Methode
----Zehn Wörter: private statische Variablen, öffentliche statische Methoden--------
2 . Nennen Sie einige Beispiele für häufig verwendete Zaubertricks und erläutern Sie deren Funktion. Wie werden unsere benutzerdefinierten Inhalte beim Drucken eines Objekts angezeigt? __construct()
wird aufgerufen, wenn ein Objekt
instanziiert wirdWenn __construct und eine Funktion mit dem Klassennamen gleichzeitig vorhanden sind, wird __construct aufgerufen und die andere wird nicht aufgerufen.
2. __destruct()
Wird aufgerufen, wenn ein Objekt gelöscht wird oder die Objektoperation beendet wird.
3. __call()
Das Objekt ruft eine Methode auf
Wenn die Methode vorhanden ist, wird sie direkt aufgerufen.
Wenn sie nicht existiert, wird die __call-Funktion aufgerufen.
4. __get()
Beim Lesen der Attribute eines Objekts,
Wenn das Attribut vorhanden ist, wird der Attributwert direkt zurückgegeben.
Wenn er nicht vorhanden ist, wird die Funktion __get aufgerufen.
5. __set()
Beim Festlegen der Attribute eines Objekts:
Wenn das Attribut vorhanden ist, wird der Wert direkt zugewiesen.
Wenn es nicht vorhanden ist, wird die Funktion __set aufgerufen.
6. __toString()
Wird beim Drucken eines Objekts aufgerufen. Zum Beispiel echo $obj; oder print $obj; __clone()
Wird beim Klonen eines Objekts aufgerufen. Zum Beispiel: $t=new Test();$t1=clone $t; __sleep()
wird vor der Serialisierung aufgerufen. Wenn das Objekt relativ groß ist und Sie vor der Serialisierung einige Dinge löschen möchten, können Sie diese Funktion in Betracht ziehen.
9. __wakeup()
wird beim Deserialisieren aufgerufen und führt einige Objektinitialisierungsarbeiten durch.
10. __isset()
Wird aufgerufen, wenn überprüft wird, ob die Attribute eines Objekts vorhanden sind. Beispiel: isset($c->name).
11. __unset()
Wird aufgerufen, wenn eine Eigenschaft eines Objekts deaktiviert wird. Beispiel: unset($c->name).
12. __set_state()
Wird aufgerufen, wenn var_export aufgerufen wird. Verwenden Sie den Rückgabewert von __set_state als Rückgabewert von var_export.
13. __autoload()
Wenn beim Instanziieren eines Objekts die entsprechende Klasse nicht vorhanden ist, wird diese Methode aufgerufen.
Magische Konstante
1. __LINE__
Gibt die aktuelle Zeilennummer in der Datei zurück.
2. __FILE__
Gibt den vollständigen Pfad und Dateinamen der Datei zurück. Bei Verwendung in einer Include-Datei wird der Name der Include-Datei zurückgegeben. Ab PHP 4.0.2 enthält __FILE__ immer einen absoluten Pfad, während Versionen davor manchmal einen relativen Pfad enthielten.
3. __FUNCTION__
Gibt den Funktionsnamen zurück (neu hinzugefügt in PHP 4.3.0). Seit PHP 5 gibt diese Konstante den Namen der Funktion zurück, wie er definiert wurde (Groß-/Kleinschreibung beachten). In PHP 4 ist dieser Wert immer kleingeschrieben.
4. __CLASS__
Gibt den Namen der Klasse zurück (neu in PHP 4.3.0). Seit PHP 5 gibt diese Konstante den Namen der Klasse zurück, als sie definiert wurde (Groß-/Kleinschreibung beachten). In PHP 4 ist dieser Wert immer kleingeschrieben.
5. __METHOD__
Gibt den Methodennamen der Klasse zurück (neu hinzugefügt in PHP 5.0.0). Gibt den Namen der Methode so zurück, wie er definiert wurde (Groß-/Kleinschreibung beachten).
3. Vergleich und Vor- und Nachteile von statischen Klassenmethoden und instanziierten Klassenmethoden
4. Es gibt ein Forum
Threads-Tabelle zeichnet Themen, Titel und andere Informationen auf
Beitragstabelle zeichnet Themeninhalte auf und antwortet und andere Informationen
Der Primärschlüssel der Threads-Tabelle ist tid
Der Primärschlüssel der Posts-Tabelle ist pid und das Themen-Tag ist tid
Verknüpfen Sie Threads und Beiträge eins zu viele über tid
Jetzt hat das Datenvolumen der Beiträge 100 Millionen erreicht und die Thread-Tabelle ist 2000.000, es gibt ungefähr 5 Antworten in einem Thema
Bitte entwerfen Sie eine Untertabelle und teilen Sie die Beitragstabelle und die Thread-Tabelle in MySQL-Tabellen auf
5. Jetzt gibt es eine MySQL-Hauptbibliothek/Cluster-Bibliothek. Bitte fragen Sie nach, wie Sie eine Master-Slave-Trennung in einem PHP-Programm erreichen können. Konfigurieren Sie die Master-Slave-Array-Datei , Übertragen Sie mehrere Modellfunktionen selbst, laden Sie die Slave-Konfiguration zur Abfrage und Instanziierung und laden Sie den Master zur Instanziierung während des Datenvernichtungsvorgangs. Vorteile: Parallelität Die Ladekapazität wird erhöht, was der Datenpflege und -sicherheit zugute kommt und verbessert Nachteile: Es kommt zu einer gewissen Verzögerung bei der Datensynchronisierung.
6. Beschreiben Sie kurz den Single-Sign-On-Mechanismus von UCenter.
Das sogenannte Single-Sign-On ist nichts anderes als mehrere Websites, die sich ein Benutzercenter teilen, um Protokoll zu erreichen gleichzeitig anmelden und abmelden.
Tatsächlich ist es der Benutzer, der sich am Ende anmeldet, aber Ajax wird verwendet (Javascript verwendet src, um asynchrone domänenübergreifende Aufrufe durchzuführen), und der Benutzer wird es nicht bemerken.
Und es wird mit P3P-Headern, verschiedenen Domänennamen und Single Sign-On implementiert (Cookie wird von ucenter verwendet).
Der Nachteil besteht darin, dass eine Ajax-Client-Anfrage verwendet wird. Wenn mehr als 10 Anwendungen vorhanden sind, verringert sich die Anmeldegeschwindigkeit verlangsamen.
7. Es gibt ein Linux-bezogenes Paket http://www.120.net/test-1.0.0.tar.gz
a Laden Sie es nach /usr/local/src herunter
b. Der Quellcode wird im Verzeichnis /usr/local/test kompiliert und installiert
c. Er basiert auf dem MySQL-Paket, das sich im Verzeichnis /usr/local/mysql befindet
Schreiben Sie den Download, die Kompilierung und Installationsprozess
wget - c http://www .120.net/test-1.0.0.tar.gz/usr/local/srctar zxvf /usr/local/src/test-1.0.0.tar.gzcd /usr/local/src/test-1.0.0. /configure --prefix=/usr/local/test --exec--prefix=/usr/local/mysqlmake testmake install
8 Schreiben Sie eine Funktion, um Daten abzurufen (der Cache läuft bald ab und die Zeitüberschreitung ist gesperrt). zu MySQL, um die Daten abzurufen, sperren Sie sie, lassen Sie einen Prozess zu MySQL gehen, um die Daten abzurufen, und andere geben die Daten im Memcache zurück
öffentliche Funktion get_cache($key) { if($this->memcahe) { $var = $this->memcahe->get($this->pre.$key); ;memcahe->get($this->pre.$key.'_valid'); if($var && !$valid) { $lock = $this->memcahe->get($this-> ;pre.$key.'_lock'); if(!$lock) { $this->memcahe->set($this->pre.$key.'_lock', true, 0, 60); return false; } } return $var; } return false; }
public function set_cache($key, $var = null, $expire = 0) { if($this->memcahe) { $expire = (int )$expire; $expire = ($expire ? $expire : $this->memcahe->set($this->pre.$key, $var, 0, $expire). 300); $this->memcahe->set($this->pre.$key.'_lock', false, 0, $expire); >pre.$key.'_valid', true, 0, $expire); return true; } return false }
9. Die Prinzipien von Warteschlangen und Stapeln können als eindimensional betrachtet werden Für den Betrieb von Arrays gilt: Die Warteschlange ist zuerst rein, zuerst raus, die Warteschlange kann nur am Kopf der Spalte entfernt werden, die Warteschlange kann nur am Ende der Spalte betreten werden, der Stapel ist der letzte rein, zuerst raus, Push und Pop sind von der Spitze des Stapels
Was ist das Funktionsprinzip des Stapels
Der Stapel ist eine abstrakte Datenstruktur, deren Betriebsmechanismus „Last-In-First-Out“ ist. Wenn Sie einen neuen Gegenstand auf den Stapel schieben, werden alle bereits auf dem Stapel befindlichen Gegenstände tiefer in den Stapel geschoben. Ebenso führt das Entfernen eines Elements vom Stapel dazu, dass alle anderen Elemente im Stapel an die Spitze des Stapels verschoben werden. Nur der oberste Gegenstand auf dem Stapel kann vom Stapel entfernt werden und Gegenstände verlassen den Stapel in derselben Reihenfolge, in der sie auf den Stapel geschoben wurden. Um das zu verstehen, können Sie sich auch an den Lade- und Entnahmevorgang eines Verkaufsautomaten erinnern.
10. arrayaccess ist wie folgt definiert: Verwenden Sie es, um ein Array zu implementieren
ArrayAccess {
/* Methoden */
abstract public boolean offsetExists ( string $offset )
abstract public Mixed offsetGet ( string $offset )
abstract public void offsetSet ( string $offset , string $value )
abstract public void offsetUnset ( string $offset )
}
class Single implementiert ArrayAccess{ private $name; $_Instance = null ; private function __construct() { } static function load() { if(null == self::$_Instance) { self::$_Instance = new Single( } return self::$_Instance; public function setName( $name) { $this->name = $name; } public function getName() { return $this->name } /*** Vier Methoden implementieren * offsetExists(), wird verwendet, um zu identifizieren, ob ein Element definiert wurde * offsetGet(), wird verwendet, um den Wert eines Elements zurückzugeben * offsetSet(), wird verwendet, um einen neuen Wert für ein Element festzulegen * offsetUnset(), verwendet Ein Element und den entsprechenden Wert löschen **/ public function offsetSet($offset, $ value) { if (is_null($offset)) { $this->container[] = $value } else { $this->container[$offset] = $value } } public function offsetGet($offset) { return isset( $this->container[$offset]) ? $this->container[$offset] : null; } public function offsetExists($offset) { return isset($this->container[$offset ]); } public function offsetUnset($offset) { unset($this->container[$offset]); $s[" name"] = "mike";echo $s->getName(); //jackecho $s["name"]; //mike
11 /local/coreseek
Die Konfigurationsdatei ist /usr/local/coreseek/etc/test.conf
Der Indexname ist post
a. Erstellen Sie den Index
b c. Erstellen Sie den Index neu (die Suche ist während des Neuerstellungsprozesses garantiert. Der Dienst ist weiterhin verfügbar)
indexer -c /usr/local/coreseek/etc/test.conf --allsearchd -c /usr/local/coreseek/etc /test.conf indexer -c /usr/local/coreseek/etc /test.conf --all --rotate12 Angenommen, Sie haben eine Posts-Tabelle und führen eine inkrementelle Sphinx-Indizierung in Quasi-Echtzeit für die Tabelle durch 🎜> Es gibt eine einfache Implementierung mit der Methode „Inkrementeller Index des Hauptindex“. Fügen Sie der Datenbank eine Zähltabelle hinzu, um bei jeder Neuerstellung des Hauptindex die letzte Daten-ID der indizierten Tabelle aufzuzeichnen, sodass nur die Daten nach dieser ID erfasst werden Während der inkrementellen Indizierung muss ein Index erstellt werden, und der Hauptindex wird jedes Mal neu erstellt. Diese Tabelle wird jedes Mal aktualisiert.
13. PHP-Code:
$i = 97;$a = ($i ) ( $i) $i ;$b = (--$i) ($i--) $i 6; 🎜>echo „$i, $a, $b“; Was ist das Ausgabeergebnis?14. Der folgende Code wird verwendet, um die Client-IP zu erhalten: if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP');} elseif( getenv ('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR');} elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR') , 'unknown')) { $onlineip = getenv('REMOTE_ADDR');} elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], ' unbekannt ')) { $onlineip = $_SERVER['REMOTE_ADDR'];} Anforderungsheader, die mit HTTP_ beginnen, sind jedoch Informationen, die vom Client gefälscht werden können. In einer Reverse-Proxy-Umgebung stellen Sie sicher, dass PHP keine gefälschten HTTP_CLIENT_IP empfängt , HTTP_X_FORWARDED_FOR-Wert?
15. Wenn beispielsweise bei großen Websites wie Google und Baidu über verschiedene Clients (z. B. Mobiltelefone und PCs) auf dieselbe URL zugegriffen wird, sind die angezeigten Seiten unterschiedlich. Bonuspunkte, wenn Sie eine praktische Lösung anbieten können.
Es kann leicht anhand von user_agent beurteilt werden, aber es ist sehr vorläufig.
Wenn möglich, verwenden Sie die Eigenschaften des Servers oder des mobilen Endgeräts oder akzeptieren Sie WAP-Gateway-Informationen usw.
Was sollten die Werte magic_quotes_gpc und magic_quotes_runtime sein? in der Produktionsumgebung php.ini eingestellt werden? onoff17. File_get_contents kann verwendet werden, wenn PHP die Remote-HTTP-Schnittstelle aufruft. Wenn der Remote-Host jedoch nicht erreichbar ist oder die Antwort zu langsam ist, wird der lokale PHP-Prozess für längere Zeit angehalten, was die Stabilität beeinträchtigt lokaler Server. Wie vermeide ich eine Zeitüberschreitung, wenn der PHP-Prozess lange dauert? 🎜>)
)
);
file_get_contents("http://www.want.com/", 0, $ctx);
curl kann auch verwendet werden, um die Remote-HTTP-Schnittstelle zu erhalten . Sie müssen auch den Timeout einstellen: curl_setopt($s,CURLOPT_TIMEOUT,$timeout); Wie bei der obigen Frage kann vermieden werden, dass die DNS-Abfrage zu langsam ist und einen Timeout verursacht? 19. Welche Systemvariablen werden mit dem Befehl mysql Character Set Set Names * festgelegt? (ACE) A. Character_set_client B. Character_set_system C. Character_set_results D. Character_set_server E. Character_set_connection F. Character_set_database20 Bei welcher der folgenden Sortierregeln wird die Groß-/Kleinschreibung nicht beachtet? (A) A. utf8_general_ci B. utf8_general_cs C. utf8_general_bin21.
strip_tags können zunächst gefiltert werden, oder Sie können Ihre eigene Filterfunktion schreiben, um spezielle Tags zu verarbeiten und durch ASCII-Codes zu ersetzen Um CSRF-Angriffe zu verhindern?
Zur Abwehr von CSRF-Schwachstellen auf der Webanwendungsseite werden im Allgemeinen Referer-, Token- oder Bestätigungscodes verwendet. Die Tokenf-Methode ist immer noch vertrauenswürdiger
Das Obige hat den Austausch von PHP-Interviewfragen einschließlich relevanter Inhalte eingeführt. Ich hoffe, dass dies für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.